0

そのため、ポリモーフィック アソシエーションの実装について Railscast 154 に従い、起動して実行することができましたが、コメントしたユーザーに電話をかけようとすると、未定義のメソッドが返されます。

ここに私の移行があります:

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.text :content
      t.belongs_to :commentable, polymorphic: true
      t.references :member

      t.timestamps
    end
    add_index :comments, [:commentable_id, :commentable_type]
    add_index :comments, :member_id
  end
end

コメントコントローラー:

class CommentsController < ApplicationController

before_filter :authenticate_member!
before_filter :load_commentable

  def create
    @comment = @commentable.comments.new(params[:comment])
    if @comment.save
      redirect_to :back
    else
      render :new
    end
  end

  def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy

    if @comment.destroy
      redirect_to :back
    end
  end

  private

  def load_commentable
    klass = [Status, Medium].detect { |c| params["#{c.name.underscore}_id"] }
    @commentable = klass.find(params["#{klass.name.underscore}_id"])
  end

メディアコントローラー:

def show
    @medium = Medium.find(params[:id])
    @commentable = @medium
    @comments = @commentable.comments
    @comment = Comment.new
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @medium }
    end
end

コメントフォーム:

<% @comments.each do |comment| %>
    <div class="comments">
        <span class="content">
            <%= comment.member.user_name %>
            <%= comment.content %>
        </span>
        <span class="comment_del">
            <%= link_to image_tag("delete-6-icon.png"), [@commentable, comment], method: :delete, data: { confirm: 'Are you sure?' } %>
        </span>
    </div>
<% end %>

私が立ち往生しているため、なぜこれが起こっているのか誰にもわかります。ありがとう。

4

1 に答える 1

2

さて、私は自分の問題を解決しました。問題は、メンバーがコメントに関連付けられていないことです。comments_controller で作成アクションを変更する必要がありました。

def create
    @comment = @commentable.comments.new(params[:comment])
    @comment.member = current_member
    if @comment.save
      redirect_to :back
    else
      render :new
    end
end
于 2013-11-21T04:30:23.403 に答える