Идентификаторы автозаполнения в форме с отношением
Я создал блог, в котором будут сообщения, а сообщения создаются пользователями. У меня уже есть система входа в мой блог. И я сделал связь между пользователем и его сообщениями. Теперь, когда я хочу добавить новый пост, я хочу, чтобы Rails автоматически заполнил поле user_id.
Должен ли я добавить скрытое поле и добавить user_id из сеанса, в котором я его сохранил?
Или у Ruby on Rails есть собственный способ работы с отношениями и использования идентификаторов?
@редактировать:
модель:
class Post < ActiveRecord::Base
validates_presence_of :subject, :body
has_many :comments
belongs_to :user
end
контроллер:
....
def new
@post = Post.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @post }
end
end
...
1 ответ
Если вы хотите убедиться, что посты блоггера связаны с правильным пользователем, то вообще не используйте для этого поле формы, так как конечный пользователь может изменить их значения. Лучше полагаться на систему входа в систему, которая у вас есть, и делать что-то подобное при отправке блога:
def create
@post = current_user.posts.build(params[:post])
if @post.save
...
else
...
end
end
Это предполагает, что у вас есть current_user
метод, возможно, в application.rb, который выбирает текущего пользователя через вашу систему входа в систему. Возможно что-то вроде:
def current_user
@current_user ||= User.find(session[:user_id])
end
а также при условии, что вы положили has_many :posts
в User.rb.