我正在尝试在RoR中设计一个简单的博客,但结果并非我所期望的。它只涉及两个表,一个Post表和一个Comments表。
我在评论模型 中的帖子模型和has_many :comments
加了belongs_to :Post
在展后展示模板中,我有以下内容:
<p id="notice"><%= notice %></p>
<h1>
<%= @post.title %>
</h1>
<p>
<%= @post.body %>
</p>
<h2>Comments</h2>
<% @post.comments.each do |comment| %>
<p><%= comment.comment %></p>
<p><%= time_ago_in_words comment.created_at %> ago </p>
<% end %>
<%= form_for(@post.comments.create) do |f| %>
<div class="field">
<%= f.text_area :comment %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
在评论控制器中,我有以下内容:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
@comment.save
redirect_to @post
end
我的问题是,当我创建与之关联的评论时,页面会重定向到评论页面,而我希望将其重定向到我评论的帖子。我做错了什么?
我的环境是MacO 10.8.2 RoR - 3.2.10 Ruby 1.9.3p362
由于
答案 0 :(得分:0)
在帖子的展示页面
def show
@post = Post.find(params[:id]
@comment = @post.comments.new
end
In View
<%= form_for([@post,@comment])... %>
Routes File Contain
resources :posts do
resources :comments
end
现在你的评论控制器在创建动作中有post_id
CommentsController < ...
before_filter :load_post
def create
@comment = @post.comments.new(params[:comment])
.....
end
private
def load_post
@post = Post.find(params[:post_id]
end
@post.comments.create
会创建实际的评论对象,但您不希望在每次展示页面点击时都创建评论,