0

ネストされたモデルがいくつかあるアプリケーションがあります... 2 つの親モデルと 2 つの子モデル。

私は子モデルにコメントを作成しようとしています.2番目の子にコメントを作成する必要があることに気付くまで、最初のモデルではうまく機能していました.コメント コントローラーの子モデル。そこで、Ryan Bates のスクリーンキャスト ( http://railscasts.com/episodes/154-polymorphic-association ) を見て、複数のモデルに属するコメントを作成することにしました...残念ながら、それは私にはうまくいきません。子モデルにコメントを作成しようとしています。1つのモデルで機能する前に使用していたものと、現在機能していないものを示します...

ここに私がコメントコントローラーのために持っていたものがあります

def create
  @collection = Collection.find(params[:collection_id])
  @design = @collection.designs.find(params[:design_id])
  @comment = @design.comments.create(comment_params)
  @comment.user = current_user
  @comment.save
  redirect_to collection_design_path(@collection, @design)
end

これが、複数のモデルで機能するように実装しようとした後の現在の状態です

def create
  @commentable = find_commentable
  @comment = @commentable.comments.build(comment_params)
  @comment.user = current_user
  @comment.save
end

private 

    def find_commentable
      params.each do |name, value|
        if name =~ /(.+)_id$/
          return $1.classify.constantize.find(value)
        end
      end
      nil
    end

ここに私のクレイジーなルートがあります

resources :collections do
  member do
    post :like
    post :unlike
  end
  resources :designs do
    resources :comments
    member do
      post :like
      post :unlike
    end
  end
end

複数のネストされたモデルに対して作成されたコメントについて、他に別のアイデアがある人はいますか? 助けてくれてありがとう。

編集:

1つのモデルに使用していたフォームは次のとおりです

<%= form_for([@collection, @design, @design.comments.build]) do |f| %>
  <%= f.text_area :comment %>
  <%= f.submit "Comment", :class => "btn" %>
<% end %>

そして、これが私が今使っているものです

<%= form_for([@collection, @design, @commentable, Comment.new]) do |f| %>
  <%= f.text_area :comment %>
  <%= f.submit "Comment", :class => "btn" %>
<% end %>

今、新しいコメントフォームを送信しようとすると、このエラーが発生します

undefined method `comments' for #<Collection:0x0000010150cf88>

create メソッドを指す

編集2

これが私のコメントモデルです

belongs_to :commentable, :polymorphic => true
belongs_to :user

これが私のデザインモデルです(コレクションモデルの子です)

has_many :comments, :dependent => :destroy, :as => :commentable
belongs_to :user
belongs_to :collection

および私のコレクション モデル (子モデル: design を持つ)

belongs_to :user
has_many :designs, :dependent => :destroy

モデルには他にもありますが、問題には関係ありません。

4

0 に答える 0