【问题标题】:Rails 3: Text_field_tag default value if params[:something].blank?Rails 3:如果params [:something] .blank,则Text_field_tag默认值?
【发布时间】:2012-09-17 12:33:25
【问题描述】:

如何做这样的事情:

  = f.input_field :age,
                  :collection => 18..60,
                  :id => 'age',
                  :selected => params[:age].blank? or "20"

以上不起作用。如果该属性没有可用的参数,我希望能够设置默认值。

任何聪明的方法都可以做到这一点!

编辑 1: 完整形式:

  = simple_form_for  :people,  :url => request.fullpath, :method => :get,  :html => { :class => 'form-search' } do |f|
    #container_search_small.form-search


      = f.input_field :age,
                      :collection => 18..60,
                      :id => 'age',
                      :selected => params[:people][:age_from] || "20"



      = f.submit "Go »"

【问题讨论】:

  • 尝试参数[:age] || “20”
  • 我觉得应该用javascript来设置默认值
  • 应该可以使用 :selected 根据参数设置值,但是如果未提交参数,则此操作失败。我得到一个未定义的方法 `[]' 用于 nil:NilClass

标签: ruby-on-rails ruby-on-rails-3 forms params


【解决方案1】:

您正在使用从您正在构建表单的对象中获取值的助手。

因此,在您的控制器中,您应该预设对象上的值。

def some_action
  @people = People.new
  @people.age = params[:age] || 20
end

然后在表单中,去掉:selected选项,应该没问题。确保为@people 构建表单:

= simple_form_for  @people,  :url => request.fullpath, :method => :get,  :html => { :class => 'form-search' } do |f|
  #container_search_small.form-search


    = f.input_field :age,
                  :collection => 18..60,
                  :id => 'age'



    = f.submit "Go »"

【讨论】:

  • Anthony 我用完整的例子更新了我的帖子。这是搜索表单的一部分,我不是创建只是希望能够将值设置回来。
  • 编辑了我的答案。您使用simple_form_for 构建表单的方式,您可以在@people 的假实例上设置值,它应该可以工作。如果您不想这样做,您可以随时创建一个form_tagapi.rubyonrails.org/classes/ActionView/Helpers/…
  • 好吧,我知道这基本上是解决方案,但在这种情况下,url request.fullpath 需要在每个操作中初始化一个完整的人员,或者我应该以某种方式使用 before 过滤器。我试试你的解决方案。说你想要age_from 和age_to 你将它们添加到可访问的属性中?比如“虚拟列”
  • 如果您想添加与数据库中的字段无关的搜索选项,那么您应该考虑使用 form_tag 构建一个表单,这样您就不会最终为搜索选项创建虚拟属性.在 People 模型上使用 age_fromage_to 没有多大意义。
  • form_tag 似乎不是这样。. 无法访问必须拥有的模型数据,我有大量的集合,我不想通过在表单中​​手动编码来复制它们;s
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 2011-11-20
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多