【发布时间】:2012-03-29 22:05:13
【问题描述】:
我的 Rails 应用发生了一些奇怪的事情。当我尝试向其中一个控制器发送更新命令时,由于某种原因,提交按钮似乎正在更改某些参数。
我正在使用嵌套资源并设置有参与者的比赛。很简单。但是,由于某种原因,当我尝试更新参与者时,它会将 :race_id 的值更改为参与者的 id (:id)。
虽然它只在更新时这样做。我似乎能够使用完全相同的表单以及完全相同的提交按钮完美地创建新参与者。
以下是一些相关代码:
_form.rb(由 new 和 update 使用)
<%= form_for ([:race, @participant]) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p><%= f.submit %></p>
<% end %>
participants_controller.rb
class ParticipantsController < ApplicationController
before_filter :authenticate_user!, :only => [:edit, :update, :destroy, :create, :new]
before_filter :set_up_race
...
def create
@participant = @race.participants.new(params[:participant])
if @participant.save
redirect_to setup_race_path(@race), :notice => "Successfully created participant."
else
render :action => 'new'
end
end
...
def update
@participant = Participant.find(params[:id])
if @participant.update_attributes(params[:participant])
redirect_to setup_race_path(@race), :notice => "Successfully updated participant."
else
render :action => 'edit'
end
end
...
def set_up_race
@race = Race.find(params[:race_id])
end
end
这就是参数似乎正在更改的原因:
如果我修改 _form.rb 文件以包含 <%= params[:race_id] %>
屏幕告诉我3
当我点击提交时,我得到:
找不到 id=25 的 Race
请求
参数:
{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"4VCZP9sI/iv8n454I8AE76n5vLiwGayuXc1NrPYfzGc=", "participant"=>{"name"=>"hgdjhgf"}, "commit"=>"更新参与者", "race_id"=>"25", "id"=>"25"}
(正如您在参数下看到的那样,“race_id”=>“25”在我单击提交后,但页面最初有 :race_id =>“3”(上面证明了,如果我做任何事情来制作表单崩溃))。
所以问题是,毕竟,为什么 :race_id 在视图和控制器之间发生变化?
编辑:根据 Jeff 的要求,这是一个 rake 路由输出: http://dylancodes.net/personal/ARTk/images/routes.png
【问题讨论】:
-
我可以通过不执行“set_up_race”进行更新(并使用 :only 让所有其他功能发生)并添加 '@race = Race.find(@participant .race_id)' 正在更新中,但这不是一个好的解决方案。另外它没有解释为什么 :race_id 正在改变......
-
你的路线是什么样的?你能包括
rake routes的输出吗? -
是的,我会发布它。但我的意思是,页面似乎都加载正确,这只是视图中的参数与控制器中的参数之间的差异(好像提交按钮的编辑:race_id)。这是路线输出:dylancodes.net/personal/ARTk/images/routes.png
标签: ruby-on-rails ruby-on-rails-3