新的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
答案 0 :(得分:1)
一个问题是您的帖子中有belongs_to :user, :dependent=>:destroy
,删除帖子时会删除该用户。所以我认为这必须转到用户端,因此当您删除用户时,您也会删除帖子。
学习路线并不容易,但你已经习惯了。一个好的开始是为他们编写测试。通过这种方式,您可以更好地了解放置对象/ ids /参数的方式和位置。最后它与你在路线中定义的相同。