0

編集:ユーザーがガイドラインにコメントできる新しいモデルをRailsアプリで作成しました。current_userをコメント投稿者として自動的に割り当てたいのですが。'commenter'を割り当てる方法(current_userの有無にかかわらず)を理解するのに実際の問題があります。私は今、属性と関係について完全に混乱しています。誰かが助けてくれたらとてもありがたいです。

以下のコードと同じように、コメンターとして何も割り当てることができないようです。新しいコメント(本文)を作成できますが、コメント投稿者をまったく割り当てることができないようです(値は'nilです)

コメント_controller.rb

 def create
            @guideline = Guideline.find(params[:guideline_id])
            @comment = @guideline.comments.create params[:comment].merge(commenter: current_user)
            redirect_to guideline_path(@guideline)
        end

comment.rb(モデル)

class Comment < ActiveRecord::Base
 belongs_to :guideline
 belongs_to :commenter, class_name: 'User'
 belongs_to :user

  attr_accessible :body, :commenter
    end

guideline.rb(モデル)

belongs_to :user
has_many :favourite_guidelines
has_many :comments, :dependent => :destroy

dbの移行には

create_table :comments do |t|
      t.string :commenter
      t.text :body
      t.references :guideline

      t.timestamps
    end
    add_index :comments, :guideline_id

私の_formは

<%= f.input :commenter %>
<%= f.input :body, label: 'Comment', as: :text, :input_html => { :cols => 200, :rows => 3 } %>
4

3 に答える 3

1

コメント投稿者の属性は文字列であり、機能しません。移行を次のように変更します。

create_table :comments do |t|
  t.references :commenter
  # ...
end

また、belongs_to :userコメントモデルからビットを削除し、attr_accessible:commenter_idの代わりに追加して、コメントの作成方法を変更します。:commenter

@comment = @guideline.comments.build params[:comment].merge(commenter_id: current_user.id)
@comment.save

これらの変更後、動作するはずです。

于 2013-03-07T14:34:24.980 に答える
0

次の関連付けを想定

# comment.rb
belongs_to :commenter, class_name: 'User'

試す

# controller
@comment = @guideline.comments.create params[:comment].merge(commenter_id: current_user.id)
于 2013-03-07T11:40:23.780 に答える
0
class Comment < ActiveRecord::Base
  before_validation :current_user_makes_the_comment

  private
    def current_user_makes_the_comment
      self.user_id = current_user.id
    end
end

current_user.buildまたは、構文を試してguideline_idcreateメソッドにを渡します

于 2013-03-07T11:37:55.260 に答える