これが私のモデルと関連です:
事業
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 %>