如何创建相关对象

时间:2014-08-05 16:08:03

标签: ruby-on-rails ruby-on-rails-3

所以我有四个模型

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

还是我错过了一个更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我猜,fields_foraccepts_nested_attributes_for可能会对您有所帮助。您可以查看这些文件。

fields_for (ActionView::Helpers::FormBuilder) - APIdock

accepts_nested_attributes_for (ActiveRecord::NestedAttributes::ClassMethods) - APIdock