我已经尝试弄清楚这个问题大约一个小时了。我有一个确实填充了成员模型对象的部分集合,当我尝试使用集合呈现它时:
<%= render :partial => 'list', :collection => @members %>
在我的 _list.html.erb 中,呈现的 html 中的 @member_id 和 @member_email 属性为空:
<%= check_box_tag('selected_member[]', @member_id, false) %>
<%= @member_email %>
View 正确呈现,我得到 3 个成员项目,但 ID 和电子邮件为空。
我做错了什么?如果我尝试使用“member_id”或“member.id”访问部分成员,我会得到“未定义的局部变量或方法‘member’”,很明显这不是正确的表示法。
现在我已经看到了一堆不同的例子,但收集方法是我需要走的路。我需要部分只处理每个成员,因为父 View 支持以不同方式对成员进行分组。如果我在部分中为每个成员实现一个循环,我将不得不将分组 View 代码也移到其中,它与父 View 中的输入字段交互。例如维护起来会很麻烦。
提前致谢。
最佳答案
当你这样做时:
<%= 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 %>
此处有更多信息(第 3.4.5 节):http://guides.rubyonrails.org/layouts_and_rendering.html
关于ruby-on-rails - Rails 部分集合为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706333/