是否可以在不通过父类的情况下编辑/更新嵌套资源?

时间:2011-09-26 02:33:23

标签: ruby-on-rails

我可以在不通过父类的情况下更新我的嵌套资源吗?

我把它放在路线

    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 ratingsid = 21 LIMIT 1 在布局/应用程序中渲染rating / show.html.erb(9.8ms)   用户负载(0.4ms)SELECT users。* FROM users WHERE usersid = 1 LIMIT 1 在151ms完成200 OK(浏览次数:143.4ms | ActiveRecord:4.8ms)

1 个答案:

答案 0 :(得分:0)

根据经验,我可以说,从长远来看,使用嵌套资源控制器进行无人操作通常会变得无法管理。所以要确保添加第二个控制器并不容易。毕竟,控制器只是资源的接口。将两个接口连接到同一资源不是问题。

您的日志显示“按RatingsController#show处理”,因此它永远不会到达#update操作;而是进入#show。

我能想到的最可能的原因是你在routes.rb的更高行上有一条(命名)路线到评级#show action,没有:via =&gt; '得到'。