从父文章控制器索引链接到嵌套评论'编辑'操作

时间:2014-05-14 23:45:15

标签: ruby-on-rails

我正在尝试链接到'编辑'来自'指数'的嵌套评论的操作其父文章控制者的行动。如果没有评论,则该链接将转到“' 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;动作。

一定是简单的我缺席。

1 个答案:

答案 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}}内轻松完成此操作时遇到麻烦。