【问题标题】:How to pass an object through a form_for rails?如何通过 form_for rails 传递对象?
【发布时间】:2013-04-03 07:22:36
【问题描述】:

我有问题。有一种形式,需要传入两个值和两个对象(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="#&lt;Team:0x00000002db46b8&gt;" />
 <input id="score_team2" name="score[team2]" type="hidden" value="#&lt;Team:0x00000003335380&gt;" />

如何通过 form_for rails 传递对象?

【问题讨论】:

标签: ruby-on-rails object form-for


【解决方案1】:

value: 选项设置为teamh 最终会在每个实例上调用#to_s 方法,从而导致您看到#&amp;lt;Team:0x00000002db46b8&amp;gt; 乱码。相反,您应该传递一些唯一标识每个团队的标识符,例如他们的数据库 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

【讨论】:

  • 查看代码就是获取您的对象并将它们表示为文本 HTML。您实际上不能在呈现的页面中表示一个对象,您只能包含一个唯一标识它的引用,即它的数据库 ID。你能详细说明为什么你“需要传递一个对象”吗?
  • 考虑一下。我需要传递对象。还有其他方法吗?
  • 模型需要传输对象,用于一堆表
  • Rails 视图中的所有内容都必须是文本,这限制了您使用简单的数据类型,如字符串、整数等。想想当用户提交时数据将如何传回给您通过 GET 或 POST 请求的表单:它将通过 params 哈希返回到您的控制器,到那时它将是一个简单的数据类型,如字符串或整数。
  • 如果您在表单中传递数据库 ID,当用户提交表单时,它会再次将数据库 ID 传递给您,并且在接收控制器操作中您只需通过其 ID 查找记录然后对其进行适当的更改。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多