从用户标识中检索用户名

时间:2013-12-16 22:54:18

标签: ruby-on-rails show relationships

您好我有一个帖子模型,其中帖子属于用户,用户有__个帖子。

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

1 个答案:

答案 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