Rails 4个字符串复选框永远不会返回一个空数组

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"的嵌套属性

MrY*_*iji 5

如果您没有选中任何复选框并提交表单,则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)