создание нового связанного объекта посредством сборки всегда устанавливает для некоторых столбцов значение nil в Rails - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть простое отношение один-ко-многим между пользователем и микросообщением, как показано ниже. Я попытался добавить новый столбец с именем stage в модель Micropost. когда я пытаюсь создать новый Micropost и сохранить, столбец stage всегда автоматически устанавливается на nil. Я пробовал create, build - не имеет значения, поле stage всегда установлено на nil. Я сбит с толку, пожалуйста, помогите!

$ rails console
Loading development environment (Rails 3.0.5)
>> User.first.microposts.create!( :stage => "p", :content => "test 6" )

=> #<Micropost id: 2, content: "test 6", stage: nil, user_id: 1, created_at: "2011-04-23 22:14:20", updated_at: "2011-04-23 22:14:20">

...

class Micropost < ActiveRecord::Base
  attr_accessible :content, :stage
  attr_accessor :stage

  belongs_to :user

  validates :content, :presence => true, :length => { :maximum => 140 }
  validates :user_id, :presence => true

  default_scope :order => 'microposts.created_at DESC'
  scope :from_users_followed_by, lambda { |user| followed_by(user) }

  private
    def self.followed_by(user)
      followed_ids = %( SELECT followed_id FROM relationships
                        WHERE follower_id = :user_id)
  where "user_id IN (#{followed_ids}) OR user_id = :user_id",
                                      { :user_id => user }  
    end

end

...

class User < ActiveRecord::Base
    attr_accessor :password
    attr_accessible :name, :email, :password, :password_confirmation

    has_many :microposts, :dependent => :destroy  
end

1 Ответ

0 голосов
/ 24 апреля 2011

Нужно удалить строку:

attr_accessor :stage

Без него все работает нормально.Я думаю, что это конфликт между attr_accessor и attr_accessible.

...