1
我有三个型号:后(has_many
票为votable
),评论(has_many
票为votable
)和投票(belongs_to
可投票)。在控制器中获取类型与多态关联的元素(Rails)?
这是votes_controller.rb:
class VotesController < ApplicationController
def vote_up
@votable = WHAT_TO_PLACE_HERE?.find(params[:id])
if @votable.votes.exists?(:user_id => current_user.id)
@notice = 'You already voted'
else
@vote = @post.votes.create(:user_id => current_user.id, :polarity => 1)
@votable.reload
end
respond_to do |format|
format.js
end
end
相关模式:
create_table "comments", :force => true do |t|
t.text "content"
t.integer "post_id"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "total_votes", :default => 0
end
add_index "comments", ["post_id", "user_id"], :name => "index_comments_on_micropost_id_and_user_id"
create_table "posts", :force => true do |t|
t.string "content"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "title"
t.integer "comments_count", :default => 0, :null => false
t.integer "total_votes", :default => 0
end
create_table "votes", :force => true do |t|
t.integer "votable_id"
t.string "votable_type"
t.integer "user_id"
t.integer "polarity"
t.integer "total"
t.datetime "created_at"
t.datetime "updated_at"
end
我需要的方式找到可投票元素的类型(后或评论)等等我可以将它分配给@votable。任何建议来完成这个?
编辑:
视图/帖/ show.html.erb:
<%= link_to "Vote Up", vote_up_path(@post), :remote => true, :class => "vote-up" %><br />
routes.rb中:
get 'votes/:id/vote_up' => 'votes#vote_up', as: 'vote_up'
谢谢!其中一个问题是:'type'是指'votes'表中的':votable_type'列(如上所示)? – alexchenco 2012-02-09 09:11:58
是的,它指的是':votable_type'。对不起,如果我使用'params [:votable_type]'而不是'params [:type]'',我的答案会更清晰。 – Mischa 2012-02-09 09:15:39
嘿,我刚刚意识到在投票创建之前没有'votable_type'(并且代码在这里提供的代码之后)。这就是为什么它不适合我。有没有解决方案? – alexchenco 2012-02-09 09:26:12