所以我有四个模型
class User
has_many :user_rows
end
class Assignment
has_many :rows
end
class Row
belongs_to :assignment
has_many :user_rows
end
class UserRow
belongs_to :user
belongs_to :row
end
在assignment
节目视图中,我想循环浏览rows
,并为每个row
设置user_row
来捕获user
输入。
我的问题是如何初始化用户行。这样做最好吗?
class AssignmentController
def show
@assignment = Assignment.include(:rows).find(params[:id])
end
end
然后在视图中使用first_or_create
<%= @assignment.rows.each do |row| %>
<%= row.data %>
<%= form_for UserRow.where(row_id: row.id, user_id: current_user.id).first_or_create, remote: true do |f| %>
<%= form_fields %>
<% end %>
<% end %>
如您所见,对象需要在视图中迭代。
我不喜欢特别因为它在视图中初始化一个对象。或者,当用户注册该网站时,最好为每个user_rows
创建所有row
,如果创建了新行,则为所有用户创建user_row
?
还是我错过了一个更好的解决方案?
答案 0 :(得分:0)
我猜,fields_for
和accepts_nested_attributes_for
可能会对您有所帮助。您可以查看这些文件。
fields_for (ActionView::Helpers::FormBuilder) - APIdock
accepts_nested_attributes_for (ActiveRecord::NestedAttributes::ClassMethods) - APIdock