尝试在rails 3中编写一个基本的“类似博客”的应用程序,我坚持使用关联。我需要create方法保存post_id以及注释表中的user_id(我需要这样才能检索用户写的所有注释以显示它)
该应用有用户(身份验证 - 设计),帖子(由用户发布 - 但我不确定在我的情况下是否重要)和评论(在帖子上,由用户发布)。
评论表有一个post_id,一个正文,还有一个user_id
社团:
has_many :comments (In the Post model)
belongs_to :post (In the Comment model)
belongs_to :user (In the Comment model)
has_many :comments (In the User model)
路线:
resources :posts do
resources :comments
end
resources :users do
resources :comments
end
帖子上显示的评论帖表单显示视图:(posts / show.html.erb)
<% form_for [@post, Comment.new] do |f| %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.submit %>
<% end %>
最后,注释控制器中的create方法:
A。)如果我写这个,post_id写在数据库中
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create!(params[:comment])
redirect_to @post
end
B。)如果我写这个,写了一个user_id ......
def create
@user = current_user
@comment = @user.comments.create!(params[:comment])
redirect_to @post
end
我试过了:
@comment = @post.comments.create!(params[:comment].merge(:user => current_user))
但它不起作用..如何编写一个保存user_id和post_id的方法?我是否还要在评论帖表格中进行一些更改(例如&lt;%form_for [@ post,@ user,Comment.new] do | f |%&gt;?)
谢谢!
答案 0 :(得分:4)
为了设置非常相似的东西,我使用了以下形式:
<%= form_for [:place, @comment] do |f| %>
#form fields here
<%= end %>
然后在评论控制器中:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
@comment.user = User.find(current_user.id)
respond_to do |format|
if @comment.save
format.html { redirect_to(@comment.post, :notice => 'Comment was successfully created.') }
else
format.html { render :action => "new" }
end
end
端
这应该有希望地建立协会!除此之外,您是否意味着要将评论嵌套在:路由中的用户?如果您只想在个人资料页面上显示所有用户的评论,您可以执行以下操作:
<p>
<b>Comments</b>
<% if @user.comments.empty? %>
No comments to display yet...
<% else %>
<% @user.comments.each do |comment| %>
<p>
<%= link_to "#{comment.post.title}", post_path(comment.post_id) %>, <%= comment.created_at %>
<%= simple_format comment.content %>
</p>
<% end %>
<% end %>
</p>
希望其中一些有帮助!