получить user_id Devise во вложенной форме rails 3.1

Я следую этому руководству http://railscasts.com/episodes/196-nested-model-form-part-1 для вложенной формы.

У меня есть 3 модели первого user.rb:

class User
 has_many :boards, dependent: :destroy
 has_many :posts, dependent: :destroy, :autosave => true
 accepts_nested_attributes_for :boards
 accepts_nested_attributes_for :posts

end

Вторая модель это board.rb

class Board
has_many :posts, :dependent => :destroy , :autosave => true
accepts_nested_attributes_for :posts
belongs_to :user
end

Третья модель это post.rb

class Post
belongs_to :user
belongs_to :board
end

Я хочу создать новый пост, так как форма доски у меня есть в boards_controller.rb

def new
  @board = Board.new
  @board.posts.build
 respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @board }
 end
end

def create
 @board = current_user.boards.new(params[:board])
 @board.user = current_user
respond_to do |format|
  if @board.save
    format.html { redirect_to @board, notice: 'Board was successfully created.' }
    format.json { render json: @board, status: :created, location: @board }
  else
    format.html { render action: "new" }
    format.json { render json: @board.errors, status: :unprocessable_entity }
  end
end
end

С помощью этих двух методов я получаю все атрибуты сообщений в своих представлениях. в моей консоли, если я поставлю после создания доски Post.first, я получаю:

1.9.2-p290 :007 > Post.first
=> #<Post _id: 4f0b0b211d41c80d08002afe, _type: nil, created_at: 2012-01-09 15:43:29 UTC, user_id: nil, board_id: BSON::ObjectId('4f0b0b1b1d41c80d08002afd'), content: "hello post 2"> 

Но если вы посмотрите, я получаю user_id: nil.

В обычной модели я получаю идентификатор пользователя, например, при создании действия контроллера я помещаю @post.user = current_user.id или @post.user = current_user

Как я могу получить user_id во вложенной публикации модели из вложенных форм?


person hyperrjas    schedule 09.01.2012    source источник


Ответы (2)


Вы должны иметь возможность просто установить свойство user_id.

В вашем коде вы назначаете объект current_user ассоциации.

Это должно работать:

def create
 @board = current_user.boards.new(params[:board])
 @board.user_id = current_user.id
respond_to do |format|
  if @board.save
    format.html { redirect_to @board, notice: 'Board was successfully created.' }
    format.json { render json: @board, status: :created, location: @board }
  else
    format.html { render action: "new" }
    format.json { render json: @board.errors, status: :unprocessable_entity }
  end
end
end
person Tigraine    schedule 09.01.2012
comment
спасибо, но user_id для публикации для меня равен нулю :(. user_id для доски работает нормально, но user_id для публикации равен нулю. Я не знаю, как получить user_id для публикации. Мне нужно доступ к атрибутам пользователя, начиная с Post с Post.user.name или Post.user.email, например.Если я поставлю Post.first, я снова получу: <Post _id: 4f0b202e1d41c80d08002b62, _type: nil, created_at: 2012-01-09 17:13:18 UTC, user_id: nil, board_id: BSON::ObjectId('4f0b20291d41c80d08002b61'), content: "Dont working"> - person hyperrjas; 09.01.2012
comment
Я пробовал это: @board.posts.build(:user_id => current_user.id), но у меня не работает. - person hyperrjas; 09.01.2012

person    schedule
comment
Спасибо, что не работаете на меня: я использую mongoid. Я получаю следующую ошибку: BSON::InvalidDocument (Cannot serialize an object of class User into BSON.): Пост создан, но user_id по-прежнему равен нулю, MONGODB myapp_development['boards'].insert([{"name"=>"board 2", "_id"=>BSON::ObjectId('4f0b6bc51d41c80d08002bcf'), "user_id"=>BSON::ObjectId('4f0b19691d41c80d08002b20'), "slug"=>"board-2", "created_at"=>2012-01-09 22:35:54 UTC}]) Completed 500 Internal Server Error in 5158ms - person hyperrjas; 10.01.2012
comment
Проблема исправлена ​​:D. Я исправил проблему с этой буклей для: for post in @board.posts post.user_id = current_user.id end Большое спасибо - person hyperrjas; 10.01.2012