我可以在不通过父类的情况下更新我的嵌套资源吗?
我把它放在路线
中 put 'ratings/:id' => 'ratings#update', :as => 'update_ratings'
我在[嵌套资源路径
中为[:edit,:update]添加了一个例外我的控制器
def update/edit
@rating = Rating.find(params[:id])
...
end
我的编辑视图:
<%= form_for(@rating, :url => update_ratings_path(@rating)) do |f| %>
服务器日志会发生put请求,但没有更新任何属性。然后页面重定向到show动作,它应该转到父类索引页面。
日志:
在2011-09-25 19:31:18 -0700的127.0.0.1开始PUT“/ ratings / 21”
由RatingsController处理#显示为HTML
参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“g4TkuG1xK8W96VSKdl3ZwedrqIXmcg9CDt6y8IqaFh0 =”,“rating”=&gt; {“environ”=&gt;“8”},“commit”=&gt;“更新等级“,”id“=&gt;”21“}
等级加载(0.3ms)SELECT ratings
。* FROM ratings
WHERE ratings
。id
= 21 LIMIT 1
在布局/应用程序中渲染rating / show.html.erb(9.8ms)
用户负载(0.4ms)SELECT users
。* FROM users
WHERE users
。id
= 1 LIMIT 1
在151ms完成200 OK(浏览次数:143.4ms | ActiveRecord:4.8ms)
答案 0 :(得分:0)
根据经验,我可以说,从长远来看,使用嵌套资源控制器进行无人操作通常会变得无法管理。所以要确保添加第二个控制器并不容易。毕竟,控制器只是资源的接口。将两个接口连接到同一资源不是问题。
您的日志显示“按RatingsController#show处理”,因此它永远不会到达#update操作;而是进入#show。
我能想到的最可能的原因是你在routes.rb的更高行上有一条(命名)路线到评级#show action,没有:via =&gt; '得到'。