我有一个具有显示页面的角色模型。在展示页面上,我有一个通过部分动态生成的注释循环。在那部分评论中,我有另一部分投票,其中包含投票按钮。当然,我想允许对评论进行投票。
我不确定如何将评论对象放入投票控制器(或VotesController模块,具体取决于实施)以创建投票。
将字符对象id添加到投票控制器很简单,因为实际视图是字符显示页面,但通过单击嵌套的部分中的投票按钮获取从部分显示的特定注释的id在注释中,partial部分导致我为访问该注释的语法画一个空白。
(我使用acts_as_votable进行投票,使用acts_as_commentable进行评论。)
应用/视图/字符/ show.html.haml
= render partial: 'comments/comment', collection: @comments, as: :comment
应用/视图/评论/ _form.html.haml
.comment{ :id => "comment-#{comment.id}" }
%hr
= render partial: 'votes/vote_comment'
%h4
#comment body
应用/视图/票/ _vote_comment.html.haml
.vote-comment-buttons
= link_to image_tag("upvote.png"), votes_upvote_path(), method: :post, remote: true
= link_to image_tag("downvote.png"), votes_downvote_path(), method: :post, remote: true
应用/控制器/ votes.html.haml
VotesController < ApplicationController
def upvote
# Need the specific comment or comment id whose vote button was clicked.
end
def downvote
# Need the specific comment or comment id whose vote button was clicked.
end
end
答案 0 :(得分:1)
嗯,这是基本提示:
id
和type
以在控制器中构建它们。comment_path(comment)
之类的内容,该注释中只有id
会传递给您的操作。通过观察您的操作代码(它应该包含类似Comment.find(params[:id])
)的内容可以轻松检查。some_voting_path(commentable_id: 14, commentable_type: 'character')
。您可以使用params['commentable_type']
或您通过网址传递的任何值来访问操作中的参数。如果您遵循传递id
和type
方法,您应该可以进行一些元编程:
def upvote_method
model = params[:commentable_type].camelize.constantize # => e.g., Post
object = model.find(params[:commentable_id]) # => post object
# here goes your inner logics
end
请注意,如果您使用GET
方法发送请求,这些参数将显示在您的浏览器网址中。但是,您不应在此处使用GET
,因为投票会更改数据库中对象的状态。