1

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

私がしなければならないことが2つあります。

  1. 治療の名前を表示します (user.user_treats.treat.name を simple_form で表現するにはどうすればよいですか?)
  2. instance_cost を正しく設定してください。現在、まったく設定されていません。
4

1 に答える 1

2

ネストされた関連付けに対して fields_for を実行する場合、 User モデルに次を追加する必要があります。

accepts_nested_attributes_for :user_treatments

そうしないと、情報が保存されません。

処理の名前にアクセスするには、次のように、フォーム クリエーター オブジェクトのオブジェクト メソッドを使用できます。

<%= f.fields_for :user_treatments do |pt| %>
  <tr>
    <td><%= pt.object.treatment.name %></td>
    ...
  </tr>
<% end %>
于 2013-06-03T06:57:28.173 に答える