【问题标题】:Rails collection_select vs f.collection_selectRails collection_select vs f.collection_select
【发布时间】:2014-02-18 20:44:38
【问题描述】:

我无法理解两者之间的区别。有人可以解释一下使用 form_for 时的区别吗?

假设你有这个:<%= form_for(@post) do |f| %>

示例 - 你什么时候使用这个?

<%= collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

对比用这个?

<%= f.collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

Rails Api

【问题讨论】:

  • f。通常用于指示与其相关的对象的表单,在collection_select标记的情况下,它需要对象所以f。不需要,我认为(这就是我评论的原因:P)这是正确的答案

标签: ruby-on-rails forms form-for


【解决方案1】:

当您使用f.some_form_helper 时,助手将已经知道您要为其创建字段名称的模型的名称。这样您就可以放弃 :post 参数。 form_for(@post) 为您提供f 表单构建器对象,该对象知道表单适用于什么模型。

对于常规的 collection_select(或任何其他带有 f. 的助手),您必须传入该字段的模型名称作为第一个参数。

您的示例有点偏离,因为您向两者都传递了相同的参数。 f.collection_select 不需要:post

这是 non f. 助手的正确用法:

<%= collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

这是使用 f. 助手的更正方法:

<%= f.collection_select(:author_id, Author.all, :id, :name_with_initial, prompt: true) %>

f 对象具有对您通过f.object 传递给form_for 的模型的引用。这就是它知道在后台调用collection_select(:post, ...) 的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多