0

アクティビティには、複数のタイプの参加者 (親、子供、または完全な家族) を含めることができます。

私のテーブルは、結合を行うためのアクティビティ、親、子供、家族、およびActivity_itemsです。Routes : activity_items はアクティビティの下にネストされています。

Activity_items には、参加者をアクティビティにリンクするための activity_id フィールドがあります。また、親、子、または家族をリンクするための activity_itemable_id と type があります (ここではポリモーフィズムを示します)。

目標は、特定の日の活動の参加者のリストを作成することです。アクティビティの view#show で詳細を確認し、参加者を追加できます (アイテムを作成します)。

私のコードが適切ではないことを確信している場所:

activity_items コントローラーでアクションを作成します。

  def create
   @activity = Activity.find(params[:activity_id])
   @activity_item = @activity.activity_items.new(activity_itemable_id: params[:itemable_id], activity_itemable_type: params[:itemable_type])

そして、このアイテムを作成するビューの link_to (参加者を追加)

<% @parents.each do |p| %>
   <li>
     <%= link_to "#{p.firstname} #{p.lastname}", activity_activity_items_path(@activity, itemable_id: p.id, itemable_type: p.class.name), method: :post %>
   </li>
<% end %>

これが、必要なパラメーターを使用して適切な activity_items を作成するために自分で見つけた唯一の方法です。

基本 (params[:activity_item]) が機能していなかったので、上記のように params を取得することにしました。

ポリモーフィック アソシエーションに関する Railscast を見ていましたが、古いコードをどのように改善できるか疑問に思っていました。

この質問に関するドキュメントは大歓迎です。私のニーズに合ったものが見つかりませんでした。

ありがとう !

4

1 に答える 1

0

コントローラーとビューを少しリファクタリングできましたが、それが「良い」コードかどうかはわかりません。

コントローラー:

def create
  @activity = Activity.find(params[:activity_id])
  @activity_item = @activity.activity_items.new(params[:activity_item]) 

そしてビュー:

<% @parents.each do |p| %>
       <li>
        <%= link_to "#{p.prenom} #{p.nom}",
            activity_activity_items_path(
              @activity,
              activity_item:{
                              activity_itemable_id: p.id,
                              activity_itemable_type: p.class.name
                              } ),
            method: :post %>
      </li>
<% end %>

パラメータはより明確になり、コントローラはより「一般的」になりました。

于 2013-07-15T10:58:06.163 に答える