0

我正在使用 rails 3.2.8,但我遇到了 form_for 的问题:

在不同模型的视图中,我有以下形式:

<%= form_for pair, { :method => :put } do |f| %>
     <td><%= pair.token.value %></td>
     <td><%= pair.pair_token.value %></td>
     <td><%= pair.freq %></td>
     <td><%= pair.distance %></td>
     <td><%= f.select :distance, [['', nil], ['Strongly Opposite', -3], ['Moderately Opposite', -2], ['Weakly Opposite', -1],
                              ['No Relationship', 0], ['Weakly Similar', 1], ['Moderately Similar', 2], ['Strongly Similar', 3]], {}, {} %></td>
     <td><%= pair.agree %></td>
     <td><%= f.select :agree, [['', nil],['True', 1], ['False', 0]], {}, {} %></td>
     <td><%= f.submit %></td>
<% end %>

此表单位于称为令牌的模型的视图中。该页面实际上是标记 show.html。我得到了回应:

No route matches [POST] "/pairs/269671"

我不确定出了什么问题,因为我要求执行 PUT 操作并且 pair 对象正在尝试发布帖子。

谢谢

4

4 回答 4

0

试试这个

<%= form_for pair do |f| %>
     <td><%= pair.token.value %></td>
     <td><%= pair.pair_token.value %></td>
     <td><%= pair.freq %></td>
     <td><%= pair.distance %></td>
     <td><%= f.select :distance, [['', nil], ['Strongly Opposite', -3], ['Moderately Opposite', -2], ['Weakly Opposite', -1],
                              ['No Relationship', 0], ['Weakly Similar', 1], ['Moderately Similar', 2], ['Strongly Similar', 3]], {}, {} %></td>
     <td><%= pair.agree %></td>
     <td><%= f.select :agree, [['', nil],['True', 1], ['False', 0]], {}, {} %></td>
     <td><%= f.submit %></td>
<% end %>

form_for 知道如何处理记录的创建/更新,因此无需指定方法。

于 2013-08-17T21:48:04.413 回答
0

也许您需要以如下形式包含令牌:

<%= form_for [:tokens, pair] do |f| %>
 <td><%= pair.token.value %></td>
 <td><%= pair.pair_token.value %></td>
 <td><%= pair.freq %></td>
 <td><%= pair.distance %></td>
 <td><%= f.select :distance, [['', nil], ['Strongly Opposite', -3], ['Moderately Opposite', -2], ['Weakly Opposite', -1],
                          ['No Relationship', 0], ['Weakly Similar', 1], ['Moderately Similar', 2], ['Strongly Similar', 3]], {}, {} %></td>
 <td><%= pair.agree %></td>
 <td><%= f.select :agree, [['', nil],['True', 1], ['False', 0]], {}, {} %></td>
 <td><%= f.submit %></td>
<% end %>

所以你的路线将是:

[POST] /tokens/:token_id/pairs/:pair_id

如果这不起作用,试试这个:

<%= form_for [@token, pair] do |f| %>
 <td><%= pair.token.value %></td>
 <td><%= pair.pair_token.value %></td>
 <td><%= pair.freq %></td>
 <td><%= pair.distance %></td>
 <td><%= f.select :distance, [['', nil], ['Strongly Opposite', -3], ['Moderately Opposite', -2], ['Weakly Opposite', -1],
                          ['No Relationship', 0], ['Weakly Similar', 1], ['Moderately Similar', 2], ['Strongly Similar', 3]], {}, {} %></td>
 <td><%= pair.agree %></td>
 <td><%= f.select :agree, [['', nil],['True', 1], ['False', 0]], {}, {} %></td>
 <td><%= f.submit %></td>
<% end %>
于 2013-08-19T06:53:55.143 回答
0

你的路由文件是什么样的?

Rails 具有用于不同操作的默认 HTTP 动词。见这里: http: //guides.rubyonrails.org/routing.html#crud-verbs-and-actions

创建通过 POST 进行,更新通过 PUT 进行。所以,你的路由需要同时支持这两者,这就是 Rails 在后台通过resources :pairsconfig/routes.rb 所做的。

如果您使用默认的 Rails 约定,则不需要覆盖用于给定表单提交的 HTTP 动词。

而且,如果您想进一步了解这些问题,请查看这个 SO 问题: PUT vs POST in REST

于 2013-08-13T18:22:38.100 回答
0

只是不要对方法进行硬编码,因为在不同的操作中使用了相同的表单,并且您正在破坏 Rails 约定。

@object = MyModel.new
<%= form_for @object do |f| %>

如果您执行编辑操作,则相同

@object = MyModel.find(2)
<%= form_for @object do |f| %>

rails 会注意方法。希望能帮助到你 !

于 2013-08-19T13:20:22.700 回答