首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评论微博:创建和删除评论在Rails?

评论微博:创建和删除评论在Rails?
EN

Stack Overflow用户
提问于 2015-11-30 14:28:38
回答 1查看 370关注 0票数 0

当我试图删除注释时,出现了一个错误,即“未定义的方法‘破坏’表示为nil:NilClass”。

当我向不同的微博添加注释时,所有评论micropost_id都是相同的,并在所有微博下面显示所有注释。

如果有人能帮我在微博上添加评论,我将不胜感激。我已经试了两个星期了,我什么也没有。

create_comments.rb

代码语言:javascript
复制
   def change
     create_table :comments do |t|
         t.string :commenter_id
         t.text :body
         t.references :micropost, index: true, foreign_key: true
         t.timestamps null: false
      end

comments_controller.rb

代码语言:javascript
复制
def create
  micropost = Micropost.find_by(params[:id])
  @comment = micropost.comments.build(comment_params)
  @comment.commenter_id = current_user.id
  @comment.save
  redirect_to root_url
end

def destroy
  @comment.destroy
  flash[:success] = "Comment deleted"
  redirect_to request.referrer || root_url
end

_comment.html.erb

代码语言:javascript
复制
     <% @comment.each do |comment| %>
         <p><%= comment.body %></p>
         <span class="timestamp">
             Posted <%= time_ago_in_words(comment.created_at) %> ago.
             <%= link_to "delete", comment, method: :delete %>
         </span>
     <%end%>

_comment_form.html.erb

代码语言:javascript
复制
<%= form_for(Comment.new) do |f| %>
   <p>
     <%= f.text_area :body, :placeholder => "Leave a comment" %>
   </p>
   <p>
     <%= f.submit %>
   </p>
<% end %>

routes.rb

代码语言:javascript
复制
resources :microposts  
resources :comments 

_micropost.html.erb

代码语言:javascript
复制
<li id="micropost-<%= micropost.id %>">
   <%= link_to micropost.user.name, micropost.user %>
   <%= micropost.content %>

    <div id="comments">
         <%= render "comments/comment" %>
    </div>
         <%= render 'shared/comment_form' %>

</li>

microposts_controller.html.erb

代码语言:javascript
复制
 def show
     @micropost = Micropost.find(params[:id])
     @comment = @micropost.comments(params[:id])
 end

static_pages_controller.html.erb

代码语言:javascript
复制
def home
 if logged_in?
   @micropost  = current_user.microposts.build
   @feed_items = current_user.feed.paginate(page: params[:page])
   @comment = Comment.all
 end
end
EN

回答 1

Stack Overflow用户

发布于 2015-11-30 15:08:47

microposts_controller.html.erb应该是microposts_controller.rb be app/controllersstatic_pages_controller.html.erb也是如此。

另外,在MicropostsController#show内部,您不能正确地获得Micropost的注释。你应该有这样的东西:

代码语言:javascript
复制
@comments = @micropost.comments

您现在要做的是使用micropost id获得一个特定的注释,这个id很可能返回nil。这就是为什么在destroy上出现错误的原因。

另一个问题可能是,在_micropost.html.erb中,您将您的微博称为micropost,而不是@micropost

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34000930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档