2016-11-10 59 views
1

這是我的第一個模型:值分配到活動記錄關係領域

class Sender < ApplicationRecord 
    has_many :letters 
end 

,這是第二個:

class Letter < ApplicationRecord 
    belongs_to :sender 
end 

我發現在鐵軌康壽這樣的信:

@letter = Letter.where(id: 378) 

結果是:

#<ActiveRecord::Relation [#<Letter id: 378, indicator: "95/2", classification: "aa", urgency: "aa", package_id: nil, registrar_id: 0, user_id: nil, subset_type: "official", created_at: "2016-11-10 06:02:14", updated_at: "2016-11-10 06:02:14", sender_id: nil>]> 

正如你所看到的sender_id。 我想要的東西是一個值設置爲SENDER_ID這樣的:

@letter.sender_id = 12 

,但我得到這個錯誤

NoMethodError: undefined method `sender_id=' for #<Letter::ActiveRecord_Relation:0x00000004cc96c0> 
Did you mean? send_later 
    from /var/lib/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/relation/delegation.rb:123:in `method_missing' 
    from /var/lib/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/relation/delegation.rb:93:in `method_missing' 
    from (irb):19 
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/console.rb:65:in `start' 
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/console_helper.rb:9:in `start' 
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:78:in `console' 
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

有什麼不對?

回答

1
Letter.where(id: 378) 

返回收集的匹配查詢條件的記錄。當然,對於ActiveRecord::Relation對象,您沒有方法sender_id=

你想,而不是什麼是一個記錄,它可通過任何一種

@letter = Letter.where(id: 378).first 

@letter = Letter.find(id: 378) 

拿到現在,有一個記錄,你可以更新它的sender_id屬性:

@letter.update(sender_id: 12) 
+0

萬分感謝@AndreyDeineko :)這是我的錯放到哪裏,而不是發現。 –

+0

@AfsaneFadaei我注意到,你從未接受任何問題的答案。請仔細閱讀您以往的問題,並確保選中答案,解決您的問題,這樣您就可以讓社區知道問題已解決,並獎勵提供此答案的用戶的努力。 –

+1

哦,你是對的。現在就去做。BTW感謝您的建議:) –

1

它應該是

@letter = Letter.find_by_id(378) 

# or 

@letter = Letter.find(378) 

因爲

@letter = Letter.where(id: 378) 

將返回一組記錄

+0

哦,謝謝百萬@Deepak :)這是我的錯誤:))))) –