thumbs_up投票宝石的多态类

时间:2011-01-31 18:00:07

标签: ruby-on-rails ruby-on-rails-3 controller gem vote-up-buttons

我想为许多不同的控制器制作一个通用的投票控制器。

我正在使用Thumbs_up gem,以前是vote_fu gem。

https://github.com/kitop/thumbs_up/blob/master/lib/acts_as_voter.rb

我的表单看起来像是@voteable对象的部分:

<strong class="result">Votes: <%= voteable.votes_for - voteable.votes_against %></strong>

<%= form_tag user_votes_path(current_user) do |f| %>
    <%= radio_button_tag :thumb_direction, :up %>
    <%= radio_button_tag :thumb_direction, :down %>
    <%= hidden_field_tag :voteable, @voteable %>
    <%= submit_tag :vote %>
<% end %>

但是,当我尝试将可投票对象直接传递给控制器​​时,它不起作用。

  

未定义的方法`base_class'for   串:类

我的问题是如何以多态方式查找同一个对象...即传递voteable_type和_id而不是对象本身......除非有其他更简单的方法?

控制器看起来像这样

  def create
    #@user = User.find(params[:user_id])
    current_user.vote(params[:voteable], :direction => params[:thumb_direction], :exclusive => true)
  end

#routes

  resources :users do
    resources :votes
  end

1 个答案:

答案 0 :(得分:3)

做了类似的事

  def create
    voteable_class = params[:voteable_type].constantize
    voteable_id = (params[:voteable_type].downcase + "_id").to_sym
    voteable_instance = voteable_class.find(params[voteable_id])
    current_user.vote(voteable_instance, :direction => params[:thumb_direction], :exclusive => true)
    redirect_to :back
  end

并在我想要使用的每个模型上更改了嵌套投票资源的路由。

的erb

<%= form_tag [voteable, Vote.new] do |f| %>
    <%= radio_button_tag :thumb_direction, :up %>
    <%= radio_button_tag :thumb_direction, :down %>
    <%= hidden_field_tag :voteable_type, voteable.class %>
    <%= submit_tag :vote %>
<% end %>