如何获取多态关联中的类型和id

时间:2017-03-19 16:48:38

标签: ruby-on-rails

在显示参考书目的页面上,我添加了添加评论的可能性。

这些是我的模特:

class Biblio < ApplicationRecord
    has_many :comments, as: :commentable

class Comment < ApplicationRecord
    belongs_to :commentable, polymorphic: true

这是发表评论的形式:

<%= form_for @biblio.comments.build, url: administration_create_comment_path do |f| %>
        <%= f.text_field :texte_comment %>
        <%= f.submit %>

评论控制器包含这个:

def create
    @comment = Comment.new(comment_params)
    @comment.save
end

def comment_params
    params.require(:comment).permit(
                    :texte_comment
                    )

end

我的问题是:如何获取commentable_type

中创建的commentable_id@biblio.comments.build

因为当我在rails控制台中使用它时,它就像一个魅力:

b = Biblio.find(115)
b.commentaires.build
=> #<Commentaire id: nil, utilisateur_id: nil, texte_comment: nil, created_at: nil, updated_at: nil, commentable_type: "Biblio", commentable_id: 115>

换句话说:在控制台中有什么作用,如何在控制器中获取?

1 个答案:

答案 0 :(得分:1)

您需要在表单提交时发送biblio的ID,方法是将其添加为表单中的隐藏字段:

<%= f.hidden_field :commentable_id %>

现在在您的控制器中,您可以使用以下参数查询id:

def create
   biblio = Biblio.find_by_id(params[:comment][:commentable_id])
   @comment = biblio.commentaires.build(comment_params)
   @comment.save
end