Rails 3.2.3 kullanma, Kullanıcı ve İleti modellerim var. Her mesaj bir kullanıcıya aittir ve her bir mesajın bir user.id de alan isteğe bağlı bir from_user alanı vardır.Raylar ActiveRecord, aynı modele ait iki tane varsa, yanlış yabancı anahtar oluşturur
app/modeller/user.rb
class User < ActiveRecord::Base
has_many :messages, :foreign_key => "owner_id", :inverse_of => :owner
has_many :messages, :foreign_key => "from_user_id", :inverse_of => :from_user
end
app/modeller/message.rb
class Message < ActiveRecord::Base
belongs_to :owner, :class_name => "User", :inverse_of => :messages
validates :owner, :presence => true # Every message must have an owner_id
belongs_to :from_user, :class_name => "User", :inverse_of => :messages
end
görüyorum sorun .build
yöntemi ile olduğunu. .build
'u kullanmanın temel nedeni, (muhtemelen korunan) bir yabancı anahtarı başlatmaktır, doğru mu? (Active kayıt dernekler üzerinde Rails Guide Bkz: "Onların yabancı anahtar aracılığıyla bağlantı oluşturulacaktır.") Öyle olmadığını zorunlu owner
opsiyonel from_user
doldurup olduğunu fark
@message = @user.messages.build(<accessible attributes>)
koşuyorum Ancak zaman .
Hangi yabancı anahtarın .build
doldurulduğunu denetlemenin bir yolu var mı? Veya sadece .new
'u kullanmam ve tüm yabancı anahtarları manuel olarak atamam gerekiyor mu?
@message = Message.new(<accessible attributes>)
@message.owner = @user
@message.from_user = @another_user
Teşekkürler, üzerine gelin. Ve sonra inşa etmek için @ user.owner_messages.build () 'dir. Merak ediyorum, eğer Rails kendine özgü birleşme isimleri gerektiriyorsa, eşsiz olmadıklarından şikayet etmez mi? Görünüşe göre sadece son tanımı kullanır - eğer ben has_many: message,: foreign_key => "owner_id" i tanımlamak için olsaydım, bunu hiç görmezdim. –
'' inverse_of' isimlerinin 'belongs_to' satırlarında değişmesi gerektiğini fark ettiniz. belongs_to: sahip,: class_name => "Kullanıcı",: inverse_of =>: owner_messages' ve 'belongs_to: from_user,: class_name =>" Kullanıcı ",: inverse_of =>: user_messages'. –