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
- Rails 4中的“Factory not registered”错误
- Controller#action中的NoMethodError – #User的未定义方法`keynote’:0x007fba0e32f760>
- ruby on rails 4 – devise – send_reset_password_instructions – 重置密码 – 重置密码令牌无效
- Ruby w / Sinatra:与rails相同的.js.erb是什么?
- 如何在Ruby on Rails中进行全文搜索?
- 如何在Rails测试中结合自动测试和spork?
- 为什么Rails Gemfile默认为https,当http使捆绑包更快?
- 在rspec中没有正确加载to_yaml文件(rails项目)
- has_many同时尊重factory_girl中的构建策略