Ruby on rails 有人能用简单明了的语言向我解释你选择的收藏吗?

Ruby on rails 有人能用简单明了的语言向我解释你选择的收藏吗?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在浏览关于collection\u select的Rails API文档,它们非常糟糕 标题如下: 集合\选择对象、方法、集合、值\方法、文本\方法、选项={}、html \选项={} 这是他们给出的唯一示例代码: 集合\u选择:post、:author\u id、author.all、:id、:name\u和\u首字母、:prompt=>true 有人能用一个简单的关联解释一下,比如说一个用户有很多计划,一个计划属于一个用户,我想在语法中使用什么,为什么 编辑1:另外,如果您解释了它在表单

我正在浏览关于collection\u select的Rails API文档,它们非常糟糕

标题如下:

集合\选择对象、方法、集合、值\方法、文本\方法、选项={}、html \选项={}

这是他们给出的唯一示例代码:

集合\u选择:post、:author\u id、author.all、:id、:name\u和\u首字母、:prompt=>true

有人能用一个简单的关联解释一下,比如说一个用户有很多计划,一个计划属于一个用户,我想在语法中使用什么,为什么

编辑1:另外,如果您解释了它在表单帮助器或常规表单中的工作原理,那就太棒了。假设您正在向了解web开发的web开发人员解释这一点,但对Rails来说是“相对较新的”。你怎么解释

collection_select(
    :post, # field namespace 
    :author_id, # field name
    # result of these two params will be: <select name="post[author_id]">...

    # then you should specify some collection or array of rows.
    # It can be Author.where(..).order(..) or something like that. 
    # In your example it is:
    Author.all, 

    # then you should specify methods for generating options
    :id, # this is name of method that will be called for every row, result will be set as key
    :name_with_initial, # this is name of method that will be called for every row, result will be set as value

    # as a result, every option will be generated by the following rule: 
    # <option value=#{author.id}>#{author.name_with_initial}</option>
    # 'author' is an element in the collection or array

    :prompt => true # then you can specify some params. You can find them in the docs.
)
或者,您的示例可以表示为以下代码:

<select name="post[author_id]">
    <% Author.all.each do |author| %>
        <option value="<%= author.id %>"><%= author.name_with_initial %></option>
    <% end %>
</select>

FormBuilder中没有记录这一点,但在

中,我自己花了相当长的时间研究select标记的排列

集合\u select从对象集合生成一个select标记。记住这一点

对象:对象的名称。这用于生成标记的名称,并用于生成选定的值。这可以是一个实际对象,也可以是一个符号——在后一种情况下,该名称的实例变量是::post在控制器中查找名为@post的实例变量

方法:方法的名称。这用于生成标记的名称。。换句话说,您正试图从“选择”菜单中获取的对象的属性

集合:对象的集合

值\方法:对于集合中的每个对象,此方法用于值

文本\方法:对于集合中的每个对象,此方法用于显示文本

可选参数:

选项:可以传递的选项。这些记录在选项标题下

html_选项:此处传递的内容只需添加到生成的html标记中即可。如果您想提供一个类、id或任何其他属性,它会出现在这里

您的协会可以写为:

集合\选择:用户,:计划\ id,计划.all,:id,:名称,{:提示符=>true,:多个=>true}


关于使用form_for,同样非常简单,对于form_for内的所有标记,例如f.text_字段,您不需要提供第一个对象参数。这是从语法的形式_中提取的。

这很容易,是我见过的对复杂Rails结构的最好解释之一。您使用了清晰的语言以及基本的Rails构造来巩固它。多谢!!为什么你要给它命名为post[author_id]?@alexkv谢谢-你能详细说明:post、字段名称空间和:author_id、字段名称参数的意义吗?前两个参数-我不理解它们在方案中的用途-它们不能省略吗?第一个参数确实可以为零。如果您正在创建一个对象窗体,则它将是该对象,以便select与窗体的其余部分具有相同的名称空间。如果不需要,则将第一个保留为零。第二个是控件的名称,因此如果要更新对象第一个参数上的字段,则字段名称是第二个参数。如果您正在制作一些表单用于其他用途,则第二个参数是您希望表单控件命名和标识的任何参数。为什么要将其与nil 1st一起使用?可能是因为您希望为:prompt选项选择collection\u select。我还应该注意,将提示参数固定到使用options\u for\u select的select标记上,可以获得相同的效果,这可能会与使用nil对象的collection\u select的结果相同。感谢您花时间……但老实说,唯一的问题是,你的解释无助于澄清我的想法。你在实际定义中使用了很多术语。不过,我非常感谢你抽出时间——因此,我投了赞成票。出于马尔卡米利昂明确说明的原因,我投了反对票。是的。这是我见过的最糟糕的文档公平地说,文档很好,只是不在FormBuilder中,而是在FormOptionHelper中:我最喜欢的部分是在表单中使用collection_select时,它会更改整个签名,使对象不是参数列表的一部分,而是将collection_select作为对象上的方法调用。不要认为他们在文档中提到……这是一个开源项目:如果文档很差,我们只能怪自己;如果我们能尽自己的一份力量让它变得更好,那将是令人惊讶的。小型/简单的PRs有很长的路要走。