2013-12-16 6 views
1

Привет У меня есть модель сообщений, где сообщение принадлежит пользователю и пользователю has_many сообщений.Извлечь имя пользователя из ID пользователя

В таблице сообщений имеет user_id

На данный момент в моих шоу постов у меня есть:

<td><%= post.user_id %></td> 

Я получаю пользователи идентификатор, который делает запись это работает отлично. Как я могу получить имя пользователя, когда таблица 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

Если у вас нет клиента, который фактически платит за webservice api, возьмите эти строки format.json. Они предназначены только для учебников; у реальных проектов никогда не должно быть избыточного спекулятивного кода – Phlip

ответ

2

Если postbelongs_touser, то вы можете сделать:

<%= post.user.user_name %> 

И никто вам не нужно добавлять post_id для пользователей, потому что это post, что belongs_touser не userbelongs_topost. Когда postbelongs_touser, у вас есть user_id, внешний ключ в posts стол.

Надеюсь, что это имеет смысл.

Update:

Причины вы получаете 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 

Я не включая irrelavant линий в create действия выше.

current_user.posts.build(params[:post]) строит post объект для current_user, таким образом, встроенный post получает соответствующий пользователь в этом случае current_user. С этим вы сможете:

post.user.username 
+0

Я получаю эту ошибку, когда я пытаюсь использовать этот неопределенный метод 'username 'для nil: NilClass – user2527785

+0

Не должно быть' user_name', а не 'username'? Обратите внимание на подчеркивание. – vee

+0

Его имя пользователя на мой взгляд жаль, что я ошибся в своем первом сообщении – user2527785

Смежные вопросы