用simple_form_for表示关联的模型



我有以下模型,其中UserTreatment本质上是一个查找表,但它有另一个名为instance_cost的字段,该字段针对每个关系存储一个整数。

class User < ActiveRecord::Base
    has_many :user_treatments
    has_many :users, :through => :user_treatments
end
class UserTreatment < ActiveRecord::Base
    attr_accessible :instance_cost
    belongs_to :user
    belongs_to :treatment
end
class Treatment < ActiveRecord::Base
    attr_accessible :name
    has_many :user_treatments
    has_many :users, :through => :user_treatments
end

我可以这样获取用户id 14的第一个实例成本

1.9.3p429 :181 > User.find(14).user_treatments.first.instance_cost
=> 100

和这个来获得治疗的名称

1.9.3p429 :181 > User.find(14).user_treatments.first.treatment.name
=> "Sports Massage"

然而,我有一个问题,表示他们的形式使用simple_form_for

<% simple_form_for @user do |f| %>
   # This sucessfully gives us the checkboxes of all treatments and stores them in the UserTreatments table
<%= f.collection_check_boxes(:treatment_ids, Treatment.all, :id, :name) %>
 <%= f.fields_for :user_treatments do |pt| %>
        <tr>
            <td>
                <!-- I WANT THE NAME OF THE TREATMENT HERE --> 
            </td>
            <td><span>&pound;</span> <%= pt.input :instance_cost, :as => :string, wrapper: false, label: false  %></td>
        </tr>
    <% end %>
end

我需要做两件事。

  1. 显示治疗的名称(如何用simple_form表示user . user_treating .treatment.name ?)
  2. 正确设置instance_cost。目前还没有确定。

当您为嵌套关联执行fields_for时,您需要在用户模型中添加以下内容:

accepts_nested_attributes_for :user_treatments

否则,将不保存信息。

要访问处理的名称,可以通过表单创建器对象的object方法,如下所示:
<%= f.fields_for :user_treatments do |pt| %>
  <tr>
    <td><%= pt.object.treatment.name %></td>
    ...
  </tr>
<% end %>