Rails关联(belongs_to,has_many)无法使用create方法(用户,帖子,评论)在表中保存2个ID

时间:2010-09-17 01:58:40

标签: ruby-on-rails ruby associations has-many belongs-to

尝试在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;?)

谢谢!

1 个答案:

答案 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>

希望其中一些有帮助!