tet*_*rto 2 arrays string checkbox ruby-on-rails
我有一个字符串数组,这是多选复选框的结果,当复选框中没有选项时,数组不会改变,结果是最后一个数组保存!当复选框没有选择值时,我想显示类似""的内容.
<%= f.label :disposizione_campionamento,"Disposizione" %>
Random <%= f.check_box :disposizione_campionamento, { :multiple => true },
"Random", nil %>
Sistematica <%= f.check_box :disposizione_campionamento,{ :multiple => true },
"Sistematica", nil %>
Stratificata <%= f.check_box :disposizione_campionamento,{ :multiple => true },
"Stratificata",nil %><br/>
Run Code Online (Sandbox Code Playgroud)
在模型中
serialize :disposizione_campionamento, Array
Run Code Online (Sandbox Code Playgroud)
如果我检查Random,Sistematica和Stratificata,结果是"Random,Sistematica,Stratificata",但是如果我修改数组,取消选中所有三个值,结果就是"Random,Sistematica,Stratificata"
当我提交表格时,我在控制器中有这个:
def create
modulo2 = Modulo2.find(params[:modulo2_id])
@variabili = modulo2.variabilis.create(params[:id])
respond_to do |format|
if @variabili.save
format.html { redirect_to(modulo2_variabilis_path, :notice =>
'Modifica effettuata') }
format.xml { render :xml => @variabili, :status => :created, :location =>
[@variabili.modulo2, @variabili] }
else
format.html { render :action => "new" }
format.xml { render :xml => @variabili.errors, :status =>
:unprocessable_entity }
Run Code Online (Sandbox Code Playgroud)
disposizione_campionamento是"variabili"的一个属性,是"modulo2"的嵌套属性
如果您没有选中任何复选框并提交表单,则params的内容缺少一个值"没有被选中"的值.它只是避免提交nil输入值.
解决此问题的一种简单方法是设置相关的值,params如果之前没有设置:
导轨4:
# your_model controller
def your_model_params # redefining the Strong Params
params[:your_model][:disposizione_campionamento] ||= []
params.permit(:whatever).require(:another)
end
Run Code Online (Sandbox Code Playgroud)
Rails 3:
# your_model controller
before_filter :set_disposizione_campionamento, only: [:update, :create]
def set_disposizione_campionamento
params[:your_model][:disposizione_campionamento] ||= []
end
Run Code Online (Sandbox Code Playgroud)