活动可以有多种类型的参与者(父母,孩子或完整的家庭)。
我的表格是:活动,父母,孩子,家庭和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,我想知道如何改进我的旧代码。
欢迎任何有关此问题的文档,我找不到满足我需求的内容。
谢谢!
答案 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 %>
现在,参数更清晰,控制器更“通用”。