2016-03-25 75 views
0

我正在寫一個簡單的博客與身份驗證,我堅持一個小問題 - 我需要評論屬於當前用戶,並顯示他的名字。所以:如何在Ruby on Rails中顯示註釋用戶名?

  1. 我創建的用戶模型username:string
  2. Post.rbhas_many :comments, dependent: :destroy
  3. User.rbhas_many :comments
  4. Comment.rbbelongs_to :post belongs_to :user
  5. 我法師遷移addUserIdToComments user_id:integer
  6. comments_controller.rb我寫@comment.user = current_user
  7. 在我看來,我有<%= comment.user.username %>

在結果我有一個NameError undefined local variable or method comment for #<#<Class:0xb93859dc>:0xb4b2a2b4> 我已經看了看here,但它並沒有幫助:(

comments_controller.rb

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create(comment_params) 
    @comment.user = current_user 
    if @comment.save 
     redirect_to post_path(@post) 
    else 
     render 'comments/form' 
    end 
end 

private 

def comment_params 
    params.require(:comment).permit(:username, :body) 
end 

show.html.erb

<div id="post_content"> 
    <h2><%= @post.title %></h2> 
    <p><%= @post.body %></p> 
</div> 
<div id="comments"> 
    <h2 class="comments">Комментариев: <%= @post.comments.count %></h2> 
    <%= render @post.comments %> 
    <%= render "comments/form" %> 
</div> 

_comment.html.erb

<div class="comment_content"> 
    <p><%= comment.user.username %></p> 
    <p><%= comment.body %></p> 
    <p><%= time_ago_in_words(comment.created_at) %></p> 
</div> 

_form.html.erb

<div id="comment_form"> 
    <h3 class="form_title">Оставить комментарий</h3> 
    <p><%= comment.user.username %></p> 
    <%= form_for ([@post, @post.comments.build]) do |f| %> 
     <p> 
      <%= f.label :Комментарий %> 
      <%= f.text_area :body %> 
     </p> 
     <p> 
      <%= f.submit %> 
     </p> 
    <% end %> 
</div> 
+2

使用你爲什麼打電話'comment'而不是'@ comment'在你的視圖中?你循環了一些@comments變量嗎? –

+0

@KarimMortabit是的,在我的'show.html.erb'我有'<%= render @ post.comments%>' – AlexNikolaev94

+1

顯示控制器和視圖(包括'render'的子視圖)代碼 –

回答

1

我不明白什麼是<%= render @post.comments %>和這裏是它的一個觀點,我看到子視圖只爲一個評論

嘗試改變

<%= render @post.comments %> 

<% @post.comments.each do |comment| %> 
    <div class="comment_content"> 
     <p><%= comment.user.username %></p> 
     <p><%= comment.body %></p> 
     <p><%= time_ago_in_words(comment.created_at) %></p> 
    </div> 
<% end %> 

,或檢查子視圖,通過@post.comments

+0

'<%= render @ post.comments%>'呈現'_comment.html.erb'部分。我嘗試過你的變體,並且它仍然返回一個錯誤,在'_form.html.erb'中'

<%= comment.user.username%>

'行 – AlexNikolaev94

+1

「_from.html.erb」是否知道'comment'?在某些情況下,評論尚未創建。檢查'nil'和'defined'的'comment'變量,如果不存在,只顯示'current_user.name',但如果用戶沒有登錄,也可以是'nil'。 –

+0

謝謝!我已將此行更改爲'current_user.username',並且它可以工作,但現在,在創建註釋時,它只是不顯示'用戶名'(儘管用戶已登錄) – AlexNikolaev94

相關問題