0

一个活动可以有多种类型的参与者(父母、孩子或一个完整的家庭)。

我的表是:Activity、Parents、Children、family 和 Activity_items 进行加入。路线: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 %>

这是我自己找到的唯一方法来创建具有所需参数的良好活动项目。

基本的 (params[:activity_item]) 不起作用,所以我决定获取上面的参数。

我正在观看关于多态关联的 railscasts,我想知道如何改进我的旧代码。

欢迎任何关于这个问题的文档,我没有找到适合我需要的东西。

谢谢 !

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 回答