【问题标题】:Select tag - using logic to specify the selected value选择标签 - 使用逻辑来指定选定的值
【发布时间】:2011-01-31 22:44:36
【问题描述】:

我有一个表单选择,默认情况下,我需要选择一个“主”根文件夹,但如果所选选项存在参数,我还需要它来使用参数。我已经看到了使用 params 作为选择的示例,除非它们为 nil。但是,如果参数为 nil,我还没有看到使用另一个值的示例(除非它是空白的,否则使用这个值,在这种情况下 - 使用另一个值)。

查看

 <%= f.select :folder_id,  options_for_select(@folders, @folder_to_select )  %>

控制器:

if  !params[:contact][:folder_id].nil?
   @folder_to_select = params[:contact][:folder_id].to_i
else
   @folder_to_select = @folders.assoc('MAIN').last.to_i
end   

我可以在 Select 中获得所有控制器逻辑功能吗?

谢谢!

编辑:

我错过了,但我原来的控制器代码实际上并没有工作。我必须先检查 [:contact] 参数是否为 nil,然后才能检查 [:contact][:folder_id] 是否为 nil(以避免在顶级 [:contact] 不存在时出现 nil 错误。

if !params[:contact].nil?
  if !params[:contact][:folder_id].nil?
     @folder_to_select = params[:card][:folder_id].to_i
  else
     @folder_to_select = @folders.assoc('MAIN').last.to_i
  end
end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    是的。

    【讨论】:

    • 谢谢。如果参数不存在(页面初始加载),我会得到一个 nil 错误。
    • 您也应该从原始帖子中的 if 语句中得到一个 nil 错误。为避免这种情况,我建议使用紧凑的 if 语句: (params.has_key?(:contact) ? params[:contact][:folder_id].to_i : @folders.assoc('MAIN').last.to_i)跨度>
    • 也就是说,我建议将所有这些逻辑保留在控制器中,或者尽可能将其添加到模型或模块中。所有这些代码都会使视图混乱,使它们更难理解。
    • 我在玩它。到目前为止,我注意到的是我的原始代码实际上不起作用(可以发誓它确实起作用)。出于某种原因,对 params[:foo] 的 nil 检查将起作用,但 params[:foo][:bar] 不起作用。就像 Ruby 只是跳到检查 [:bar] 的 nil 并绊倒整个 [:foo] 父级为 nil 的事实。我想在控制器中我可以在检查 params[:contact][:folder_id] 是否为零之前再添加一个逻辑层来检查 params[:contact] 是否为零。感谢所有帮助 - 非常感谢!
    • 哦,我明白我为什么错过了。当我第一次检查代码 [:foo] 存在但 [:bar] 没有。所以我只是认为整个 [:foo][:bar] nil 检查有效。我被愚弄了。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多