我该如何改进我的代码? Rails多态关联最佳实践

时间:2013-07-13 22:13:26

标签: ruby-on-rails polymorphic-associations

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

我的表格是:活动,父母,孩子,家庭和Activity_items来加入。 路由:activity_items嵌套在活动中。

Activity_items有一个activity_id字段,用于将参与者链接到活动。他们还有activity_itemable_id和类型来链接父母一个孩子或一个家庭(这里是多态性)

目标是在特定日期列出活动的参与者列表。 在视图#show of a activity中,您可以看到详细信息,您可以添加参与者(创建项目)。

我非常确定我的代码不正确:

在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])没有工作所以我决定得到上面的参数。

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

欢迎任何有关此问题的文档,我找不到满足我需求的内容。

谢谢!

1 个答案:

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

现在,参数更清晰,控制器更“通用”。