Rails 3.1.3:为什么这个嵌套资源link_to删除我的用户而不是我的帖子?

时间:2012-02-01 06:45:18

标签: ruby ruby-on-rails-3

新的rails并在rails 3.1.3中创建一个简单的博客,其中用户has_many帖子和帖子属于用户。每当我尝试删除特定用户的特定博客帖子时,我最终会破坏用户但不会破坏帖子......

1)我做错了什么? 2)对于更有经验的程序员,在学习Rails路由时,你是如何学习要传递的“对象”参数和路径语法(例如,edit_user_post_path(@ user,post))的?这只是一个试验和错误的问题并阅读API? (这就是我现在正在做的事情。)

查看index.html.erb的代码段我试图销毁特定用户的帖子

#Navigate to http://localhost:3000/users/7/posts which brings up index.html.erb view:
<% @posts.each do |post| %>
 <tr>
   <td><%= post.content %></td>
   <td><%= post.title %></td>
   <td><%= link_to 'Show', ([@user, post] ) %></td>
   <td><%= link_to 'Edit', edit_user_post_path(@user,post) %></td>
   <td><%= link_to 'Destroy', [@user, post], confirm: 'Are you sure?', method: :delete %></td>
  </tr>
  

嵌套资源设置如下:

来自routes.rb的路线

Simpleblog::Application.routes.draw do
  resources :users do
    resources :posts
  end

  resources :posts
:

模型

class Post < ActiveRecord::Base
  belongs_to :user, :dependent=>:destroy
end

class User < ActiveRecord::Base
  has_many :posts
end

帖子后控制器代码段

class PostsController < ApplicationController
   before_filter :get_user
 :
 def index
    @posts = @user.posts
 :
 def show
     @post = @user.posts.find(params[:id])
  :
 def destroy
   @post = @user.posts.find(params[:id])
    @post.destroy

   respond_to do |format|
     format.html { redirect_to user_posts_url }
     format.json { head :ok }
   end
 end

 private
 def get_user
    @user = User.find(params[:user_id]) 
 end

1 个答案:

答案 0 :(得分:1)

一个问题是您的帖子中有belongs_to :user, :dependent=>:destroy,删除帖子时会删除该用户。所以我认为这必须转到用户端,因此当您删除用户时,您也会删除帖子。

学习路线并不容易,但你已经习惯了。一个好的开始是为他们编写测试。通过这种方式,您可以更好地了解放置对象/ ids /参数的方式和位置。最后它与你在路线中定义的相同。