Im обучения Rails, и мне просто интересно, правильно ли я написал код, который я написал. У меня две модели: пользовательская и постмодельная. Сообщения принадлежат пользователям, поэтому я хочу передать user_id автоматически для публикации при создании объекта. Я использовал метод assign_attributes в пост-контроллере, чтобы установить user_id с помощью помощника current_user, предоставленного приложением. Ниже мой соответствующий код. Опять же, я хочу знать, правильно ли это или если есть лучший способ сделать это.Установка значения по умолчанию при создании нового объекта модели
def create
@post = Post.new(params[:post])
@post.assign_attributes({:user_id => current_user.id})
end
Сообщение Модель
class Post < ActiveRecord::Base
attr_accessible :content, :title, :user_id
validates :content, :title, :presence => true
belongs_to :user
end
модель пользователя
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
has_many :posts
end
«current_user.posts << @post» ... Как это работает? Добавляем новый объект к массиву user.posts? Но как передается значение для user_id? –
Точно - 'post' добавляется к' current_user'. 'user_id' больше не нужно передавать явно, потому что связь внешнего ключа между' post' и 'current_user' автоматически создается при добавлении сообщения к текущему пользователю. Такое реляционное сопоставление является лишь одним из удобств что ActiveRecord дает. – zeantsoi
Также обратите внимание, что я удалил '@' перед 'post'. Поскольку метод' create' (скорее всего) не будет отображать представление, нет необходимости назначать переменную экземпляра ... локальная переменная будет достаточной и (очень номинально) уменьшить распределение памяти. – zeantsoi