0

私は、ユーザーが単一の「作品」にコメントできるアプリに取り組んでいます (ブログ投稿を考えてください)。モデル内の関連付けは次のとおりです。

class User < ActiveRecord::Base
  has_many :works  
  has_many :comments

class Work < ActiveRecord::Base
  belongs_to :user
  has_many :comments


class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
  belongs_to :work

コメント テーブルでは、レコードに次のフィールドがあります。

id content
user_id
created_at
updated_at
work_id

コメント コントローラーには、次の Create アクションがあります。

def create
    @work = Work.find(params[:id])
    @comment = @work.comments.create(params[:comment])
    @comment.user = current_user
    if @comment.save
      #flash[:success] = "Post created!"
      redirect_to root_url
    else
      render 'activities'
    end
  end

ユーザーと作品の両方をコメントに関連付けようとしていますが、コメントを作成しようとすると次のエラー メッセージが表示されます。

Unknown action

The action 'update' could not be found for CommentsController

次の StackOverflow の回答をガイドとして使用しようとしていますが、解決策がうまくいきません: Rails 3 の単一レコードの複数の外部キー?

編集: 私はworks#showアクションにコメントフォームを追加しています:

def show 
  @work = Work.find(params[:id])
  @comment = current_user.comments.create(params[:comment])
  @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Work", trackable_id: @work).all
  @comments = @work.comments.order("created_at DESC").where(work_id: @work ).all 
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @work }
    end
  end

コメントフォーム自体:

<%= form_for(@comment) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, placeholder: "Post a comment!" %>
  </div>
  <%= f.submit "Post", class: "btn btn-small btn-primary" %>
<% end %>

コメント コントローラーにも更新メソッドがあります。

def update
     @comment = current_user.comments.find(params[:id])
    if @comment.update_attributes(params[:comment])
      flash[:success] = "Comment updated"
      redirect_to @comment
    end
  end
4

2 に答える 2

0

showアクション中にコメントをデータベースに永続化する場合は、次のようにします。

@comment = current_user.comments.create(params[:comment])

次に、フォーム ヘルパーは作成フォームではなく更新フォームを作成します (モデルが既に存在するため)。

<%= form_for(@comment) do |f| %>

目的のアクションが show ページから作成したコメントを POST することである場合はbuild、show アクションでコメントを試してください。

@comment = current_user.comments.build(params[:comment])
于 2013-04-16T03:48:55.230 に答える