1

我想爲許多不同的控制器製作一個通用的投票控制器。用於thumbs_up投票的多態類gem

我使用了之前爲vote_fu寶石的Thumbs_up寶石。

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 %> 

然而,當我試圖傳遞voteable對象到控制器直接就不起作用。

未定義的方法`BASE_CLASS'的 字符串:類

我的問題是再怎麼多態查找相同的對象...即通過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 

回答

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 %>