我有问题。有一个表单需要传递两个值和两个对象(teamh,teamq)。
<%= form_for (Score.new) do |f| %>
<p>
<%= f.hidden_field :team1, value: teamh %>
<%= f.hidden_field :team2, value: teamq %>
<%= f.text_field :team1_score %>
<%= f.text_field :team2_score %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
尝试通过对象隐藏字段。但它们以这种形式传递
<input id="score_team1" name="score[team1]" type="hidden" value="#<Team:0x00000002db46b8>" />
<input id="score_team2" name="score[team2]" type="hidden" value="#<Team:0x00000003335380>" />
如何通过form_for rails传递对象?
答案 0 :(得分:4)
将value:
选项设置为teamh
最终会在每个实例上调用#to_s
方法,从而导致您看到的#<Team:0x00000002db46b8>
乱码。您应该传递一些唯一标识每个团队的标识符,例如他们的数据库ID。例如,您可以将其更改为:
<%= f.hidden_field :team1_id, value: teamh.id %>
<%= f.hidden_field :team2_id, value: teamq.id %>
在接收操作中,您的控制器代码可能如下所示:
k = Team.find params[:team1_id]
d = Team.find params[:team2_id]
Score.create team1: d, team2: k, team1_score: 1, team2_score: 3