0

これが私のモデルと関連です:

事業

class Project < ActiveRecord::Base
   ...
   has_many :projectmemberizations
   has_many :users, :through => :projectmemberizations
   has_many :project_comments
   ...
end

project_comment

class ProjectComment < ActiveRecord::Base
   attr_accessible :comment, :created_at, :project_id, :user_id, :user_name
   belongs_to :project
   has_many :projectcommentations
   has_many :users, :through => :projectcommentations

   def user
     self.user
   end
end

プロジェクトのコメント

class Projectcommentation < ActiveRecord::Base
   attr_accessible :comment_id, :project_id, :user_id, :user_name
   belongs_to :project_comment
   belongs_to :user
end

ユーザー

class User < ActiveRecord::Base
   belongs_to :account
   has_many :projectmemberizations
   has_many :projects, :through => :projectmemberizations
   has_many :projectcommentations
   has_many :project_comments, :through => :projectcommentations
end  

質問

ご覧のとおり、ユーザーはプロジェクトにコメントできます。それはうまく機能しています。しかし、私が機能させようとしているのは、WHOがコメントを作成したビューに表示することです。現在、これを実行しようとしていますが、エラーは発生していませんが、user_nameには何も表示されていません。

<% @project.project_comments.each do |comment|%>
   <div class="comment">
      <%= image_tag current_user.photo.url(:small) %>
      <strong><%= comment.user_name %></strong>
      <%= comment.comment %>
</div>
<% end %>  

最後に、これを行うと、レールコンソールで機能するようになります。

comment = ProjectComment.first
comment.user_id = 1
comment.save
comment.user.name

どうやらコメントを追加するときにuser_idを保存していないようですか?ちなみにこれの長さでごめんなさい!

PSここに彼女が表示し、project_commentsコントローラーの新しいアクションがあります:

def show
    @project_comment = ProjectComment.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render :json => @project_comment }
    end

  end

  def new
    @project_comment = ProjectComment.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render :json => @project_comment }
    end
  end

ProjectComment作成メソッド

 def create
    @project_comment = ProjectComment.new(params[:project_comment])

    respond_to do |format|
      if @project_comment.save
        format.html { redirect_to project_url(@project_comment.project_id), :notice => 'Project comment was successfully created.' }
        format.json { render :json => @project_comment, :status => :created, :location => @project_comment }
      else
        format.html { render :action => "new" }
        format.json { render :json => @project_comment.errors, :status => :unprocessable_entity }
      end
    end
  end

コメントが作成されたビューからのコード

<%= form_for(@project_comment) do |f| %>
   <%= f.hidden_field :project_id, :value => @project.id %>
   <%= image_tag current_user.photo.url(:small) %>
   <%= f.text_area :comment, :class => "addcomment" %>
   <%= f.submit :value => "Comment", :class => "tagbtn" %>
<% end %>
4

1 に答える 1

2

テンプレートは現在、comment.user_nameの内容を表示しています。動作しているRailsコンソールの例では、comment.user.nameを使用しています。ProjectCommentモデルの属性のattr_accessibleリストにuser_nameがありますが、投稿されたコードのいずれもその属性の値を入力しません。

あなたが説明していることから、ProjectCommentationモデルは不要であると思います。次のモデルはあなたが探しているものを与えるはずです:

class Project < ActiveRecord::Base
    ...
    has_many :projectmemberizations
    has_many :users, :through => :projectmemberizations
    has_many :project_comments
    ...
end

class ProjectComment < ActiveRecord::Base
    ...
    attr_accessible :comment, :created_at, :project_id, :user_id, :user_name
    belongs_to :project
    belongs_to :user
    ...
end

class User < ActiveRecord::Base
    belongs_to :account
    has_many :projectmemberizations
    has_many :projects, :through => :projectmemberizations
    has_many :project_comments
end

ProjectCommentコントローラーの場合:

def create
    # If params[:project_comment] contains the user_id, it will be set here
    @project_comment = ProjectComment.new(params[:project_comment])

    # If your user id comes from somewhere else (like the user that is signed in)
    @project_comment.user_id = <user id here>

    # Normal save logic here
end
于 2012-12-12T02:43:42.353 に答える