2013-09-23 23 views
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個服務:谷歌,Facebook,YouTube和等表格的has_many的關聯表

當我編輯用戶,我應該看到表單創建的每個服務在服務表中。

谷歌的輸入您的帳戶名「
Facebook的example_account_name」
的Youtube「輸入您的帳戶名」

如果用戶已經輸入的名字,我可以編輯它,如果名稱爲空我可以創建它。如果我添加另一個服務,我必須看到另一個text_field才能編輯它的值。什麼是最好的解決方案?

回答

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 %>