1
class User < ActiveRecord::Base
  has_many :user_services
end

class UserService < ActiveRecord::Base
  attr_accessible :service_id, :user_id, :value

  belongs_to :user
  belongs_to :service
end

例如,我有 5 个服务:Google、Facebook、Youtube 等。

当我编辑用户时,我应该看到在服务表中创建的每个服务的表单。

Google '输入您的帐户名称'
Facebook 'example_account_name'
Youtube '输入您的帐户名称'

如果用户已经输入名称,我可以编辑它,如果名称为空,我可以创建它。如果我添加另一个服务,我必须看到另一个 text_field 来编辑它的值。什么是最好的解决方案?

4

2 回答 2

1

所有的魔法都在find_or_initialize

<%= form_for @user do |f| %>
  ...
  <% @services.each do |service| %>
    ...
    <%= f.fields_for :user_services, service.user_services.find_or_initialize_by_user_id(@user.id) do |user_service| %>
      <%= user_service.label :value, "Set your id" %>
      <%= user_service.text_field :value %>
      <%= user_service.hidden_field :user_id, :value => @user.id %>
    <% end %>
  <% end %>
  <p><%= f.submit "Submit" %></p>
<% end %>
于 2013-09-24T03:36:00.400 回答
0

我认为瑞恩·贝茨 (Ryan Bates) 可以为您提供答案。查看

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

于 2013-09-23T18:05:52.707 回答