我的应用中有一个has_many through:
关系person
has_many
occasions
到gifts
,反之亦然。我有一个图表,y轴为person
,x轴为occasion
,如下所示:
代码是这样的:
<table>
<tr>
<th></th>
<% @occasions.each do |occasion| %>
<th style="padding: 0 5px 0 5px"><p><%= occasion.name %></p></th>
<% end %>
</tr>
<% @people.each do |person| %>
<tr>
<td>
<a href="#edit-recipient-popup" class="open-popup-link">
<p><strong><%= person.name %></strong></p>
</a>
</td>
<% @occasions.each do |occasion| %>
<td class="text-center">
<% gifts = Gift.where(person_id: person.id, occasion_id: occasion.id) %>
<% if gifts != [] %>
<% gifts.each do |gift| %>
<div class="text-left">
<% if gift.purchased %>
<i class="icon ion-android-checkbox-outline green"></i>
<% else %>
<i class="icon ion-android-checkbox-outline-blank green"></i>
<% end %>
<%= link_to gift.name, gift_path(gift.id), person_id: person.id, occasion_id: occasion.id %>
</div>
<% end %>
<% else %>
<h1>
<%= link_to new_gift_path do %>
<i class="icon ion-ios-plus-empty green"></i>
<% end %> <!-- link -->
</h1>
<% end %> <!-- if/else end -->
</td>
<% end %> <!-- occasions each -->
</tr>
<% end %> <!-- people each -->
</table>
我不知何故需要更改新礼物的链接:
<%= link_to gift.name, gift_path(gift.id) %>
以某种方式传递加号所指示的person
和occasion
的参数。以下不起作用,但我需要这样的东西:
<%= link_to gift.name, gift_path(gift.id), person_id: person.id, occasion_id: occasion.id %>
我检查过其他一些SO帖子,但找不到符合我要求的帖子。
理想情况下,我可以在link_to
中添加参数,以便在gift#new
的表单出现时,我可以包含带有相关值的隐藏字段,如下所示:
<%= simple_form_for(@gift) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.input :price %>
<%= f.input :description %>
<%= f.input :link %>
<%= f.input :purchased %>
<%= f.association :user %>
<%= f.text_field :occasion_id, value: @occasion %>
<%= f.text_field :person_id, value: @person %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
我知道在Rails中这样的事情是可能的,但是我无法弄清楚语法。
附加信息
我尝试使用以下链接建议here的方法:
<%= link_to new_gift_path(:gift => { person_id: person.id, occasion_id: occasion.id }) do %>
这样的gifts#new
控制器方法:
def new
@gift = Gift.new(params[:gift])
end
但是这种方法在ActiveModel::ForbiddenAttributesError
的控制器定义上给出了一个错误@gift
。