【问题标题】:Using Thumbs_up to display users who voted on a post使用 Thumbs_up 显示对帖子投票的用户
【发布时间】:2014-09-28 04:58:49
【问题描述】:

我正在使用 Thumbs_Up gem 让用户对帖子(称为主题)进行投票。我已经完成了投票部分,但现在我想显示对该特定帖子进行投票的用户。我对 Ruby On Rails 很陌生,但我被困在视图部分。

这是我的控制器:app/controllers/topics_controller.rb

def vote_who
  @topic = Topic.find(params[:id])
  @vote_list=@topic.voters_who_voted_for
end

在我的 index.html.erb 中,我想显示对该帖子投票的用户的姓名。这应该就在投票按钮旁边。有点像,

但是如何从控制器发回信息? 还是这种方法完全错误?

【问题讨论】:

  • 默认情况下,控制器中的每个操作都呈现它自己的同名模板。然后将在动作中定义的实例变量传递给它们的模板。详情请查看guides.rubyonrails.org。要正确显示选民,您需要发布您的意见代码

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

恕我直言,最好在每个特定主题的“显示”视图中显示所有投票者(假设一个主题有 100 个投票者,索引视图中的这个表格会是什么样子?)。

这样您就不需要任何不同的操作(由于 Rails 约定 1 操作 == 1 视图(通常))。只需输入您的show 操作:

def show
  @topic = Topic.find(params [:id])
  @vote_list = @topic.voters_who_voted_for
end

那么在你看来 (show.html.erb) 你需要做这样的事情:

<% @vote_list.each do |voter| %> 
  <%= voter.email %> #or login, or name, or any user's attribute you want to display in your list
<% end %>  

或者甚至尝试简化这一点:将show 操作保留在您的TopicsController 中(不要创建任何@vote_list 变量,只找到正确的主题),然后在您的voters_who_voted_for 方法中调用@987654329 @,例如:

<%= @topic.title %>
<%= @topic.body %>
<%= @topic.voters_who_voted_for %>

【讨论】:

  • 这是在显示视图中获取选民的好方法!我只是想知道,在控制器中,您不必将“@vote_list”显式传递给视图吗?是否可以在 show.html.erb 中自动访问?抱歉,如果这是一个菜鸟问题,我很难理解控制器和视图是如何相互通信的:/
  • Topic 类的每个实例都可以调用voters_who_voted_for 方法(因为它是acts_as_votable)。当您通过 id 找到主题(并将其保存在 @topic 变量中)时,它已经具有主题类的所有方法。感谢 gem voters_who_voted_for 就是其中之一。因为 Rails 约定优于配置原则,所以来自控制器中操作的所有数据都会提供给具有 相同 命名的视图(#index - index.html.erb;#show - show.html.erb 和依此类推,如果您要重命名视图(例如“索引”而不是“索引”,它将对 @topics 变量一无所知)。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多