您好我有一个帖子模型,其中帖子属于用户,用户有__个帖子。
posts表有一个user_id
在我的演出文章中,我有:
<td><%= post.user_id %></td>
我得到用户ID谁发布这个工作正常。当Users表包含列User_name时,如何获取用户名?我是否需要将post_id添加到用户或?
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :username, :password_confirmation, :remember_me
has_one :profile
has_many :orders
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
attr_accessible :content, :title, :user_id
validates :title, presence: true,
length: { minimum: 5 }
end
在我的帖子控制器中我有
def create
@post = Post.new(params[:post])
@post.user_id = current_user.id
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render json: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:2)
如果post
belongs_to
user
,您可以执行以下操作:
<%= post.user.user_name %>
并且您不需要向用户添加post_id
,因为post
belongs_to
不是user
user
belongs_to
post
{1}}。在post
belongs_to
user
时,user_id
表中有posts
外键。
希望这是有道理的。
<强>更新强>
您获得undefined method 'username' for nil:NilClass
的原因是因为您创建帖子的方式未附加关联的user
对象。由于您使用的是devise
,因此您可以采取以下措施:
# app/controllers/posts.rb
def create
@post = current_user.posts.build(params[:post])
# @post.user_id = current_user.id # Remove this line
...
end
我没有在上面的create
动作中包含无关紧要的行。
current_user.posts.build(params[:post])
为post
构建current_user
对象,这样构建的post
就会获得相关用户current_user
。有了这个,你就可以做到:
post.user.username