has_many的表单基于关联表中的记录计数

时间:2013-09-23 17:39:24

标签: ruby-on-rails

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等。

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

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

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

2 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:0)