我正在尝试链接到'编辑'来自'指数'的嵌套评论的操作其父文章控制者的行动。如果没有评论,则该链接将转到“' new'动作。
resources :articles do
resources :comments
end
问题似乎是如何在Articles控制器中定义@comment以获取具有相关文章ID的正确注释ID。
文章控制器包含:
def index
@articles = Article.all
end
我可以通过在View' index.html.erb'中定义@comment来完成我想要的工作。 (见下文):
<% @articles.each do |article| do %>
<% @comment = current_user.comments.where(article_id: article.id) %>
<% if @comment.empty? %>
<%= link_to "New Comment", new_article_comment_path(article) %>
<% else %>
<% @comment.each do |comment| %>
<%= link_to "Edit Comment", edit_article_comment_path(article, comment) %>
<% end %>
<% end %>
<% end %>
但我更喜欢在Articles控制器中定义@comment。我不确定如何实施&#39; @comment = current_user.comments.where(article_id:article.id)&#39;在没有id的文章控制器中它是&#39;索引&#39;动作。
一定是简单的我缺席。
答案 0 :(得分:0)
我不知道它在控制器内是如何工作的。但我认为最好将方法移到帮助器中并从那里调用它。帮助程序中定义的方法可自动用于您的视图
你可以这样做:
def comment(article)
@comment = current_user.comments.where(article_id: article.id)
end
然后您的视图将如下所示:
<% @articles.each do |article| do %>
<% comment(article) %>
....more code....
就像你说的那样,如果你在控制器中移动它,where(article_id: article.id)
会绊倒你,因为你不知道article
id
绑定了哪个class ArticlesController < ActionController::Base
def comment(article)
@comment = current_user.comments.where(article_id: article.id)
end
helper_method :comment(article)
end
。
编辑:
如果您真的想要访问控制器内的方法,可以按this post建议:
helper
但是为什么要在{{1}}内轻松完成此操作时遇到麻烦。