我一直在努力想出这个问题大约一个小时了。我有一个部分集合确实填充了成员模型对象,当我尝试使用集合渲染它时:
<%= render :partial => 'list', :collection => @members %>
在我的_list.html.erb中,@member_id和@member_email属性在呈现的html中为空:
<%= check_box_tag('selected_member[]', @member_id, false) %>
<%= @member_email %>
视图呈现正确,我获得了3个成员项,但ID和电子邮件空白。
我做错了什么?如果我尝试使用“member_id”或“member.id”访问部分成员,我会得到“未定义的局部变量或方法`成员'”,所以很明显这不是正确的表示法。
现在我已经看到了很多不同的例子,但收集方法是我需要的方式。我需要部分只处理每个成员,因为父视图支持以不同方式对成员进行分组。如果我在每个成员的partial中实现一个循环,我还必须将分组视图代码移动到它中,它与父视图中的输入字段交互。例如维持这将是一团糟。
提前致谢。
答案 0 :(得分:4)
当你这样做时:
<%= render :partial => 'list', :collection => @members %>
Rails期望部分文件中的局部变量的名称与部分文件本身相同,在本例中为list
。
因此,默认情况下,member
代替list
,而不是<%= check_box_tag('selected_member[]', list.id, false) %>
<%= list.email %>
:
member
如果您希望将局部变量命名为<%= render :partial => 'list', :collection => @members, :as => :member %>
,则应重命名部分文件或使用以下语法:
{{1}}
此处有更多信息(第3.4.5节):http://guides.rubyonrails.org/layouts_and_rendering.html