Rails – 获取复选框值并根据参数设置检查状态的最佳方法

我在Rails中有一个表单,在提交时,使用参数重新加载相同的页面并显示一些数据。

我在表单上有一个复选框,我想根据刚刚提交的内容检查或取消选中。

这是我在控制器中的内容 –

@show_values = false if params[:check_value] == "1" @show_values = true end 

那么在我看来,我有以下情况 –

   
"checked"}%> Show X
Show X

这是我想要的方式,但我想知道是否有更聪明的方法来做到这一点。

当您需要复杂的表单时,或者未附加到模型的表单时,可以使用“表单对象”。 在’app’下创建一个名为forms或something的新文件夹。 然后创建表单的shell:

在Rails 3中:

 class SearchForm include ActiveModel::Conversion include ActiveModel::Validations extend ActiveModel::Naming def persisted? false end end 

在Rails 4中:

 class SearchForm include ActiveModel::Model def persisted? false end end 

为您的字段添加一些attr_accessors:

 class SearchForm include ActiveModel::Model attr_accessor :check_value, :title, :another_field ... 

如果您愿意,可以添加validation器,从包含和扩展ActiveModel中获得此行为:

  ... validates :title, presence: true 

然后是一个处理方法:

  ... def process(params) params = params[:search_form] self.check_value = params[:check_value] self.title = params[:title] self.another_field = params[:another_field] if valid? #Do any processing you may need to do, including stuff like sanitising inputs. return true end false end 

现在您可以像控制器中的模型一样使用它。

 def search @form = SearchForm.new @form.process[params] flash.now[:error] = "Invalid search input" unless @form.valid? # or whatever. end 

它的行为就像一个模型,因此您可以使用自己喜欢的表单构建器。

我不确定我是否理解这个问题,但是如果你想保持相同的方法,我只会在视图中看到这个:

 
<%= check_box_tag 'check_value', 1, @show_breakfast %> Show X