簡體   English   中英

在Rails控制台中更新嵌套屬性

[英]Updating nested attributes in rails console

如何更新嵌套屬性? 我收到此錯誤:

2.1.3 :021 > user.contact_requests.message = "dsfkjsdklfhdsf"
NoMethodError: undefined method `message=' for #<ActiveRecord::Associations::CollectionProxy []>
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0.beta2/lib/active_record/relation/delegation.rb:136:in `method_missing'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0.beta2/lib/active_record/relation/delegation.rb:99:in `method_missing'
    from (irb):21
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/console.rb:110:in `start'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/console.rb:9:in `start'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:68:in `console'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands.rb:17:in `<top (required)>'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:248:in `require'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:248:in `block in require'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:233:in `load_dependency'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:248:in `require'
    from /Users/bli1/Development/RoR/Boothie/bin/rails:8:in `<top (required)>'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:242:in `load'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:242:in `block in load'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:233:in `load_dependency'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0.beta2/lib/active_support/dependencies.rb:242:in `load'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/commands/rails.rb:6:in `call'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/command_wrapper.rb:38:in `call'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application.rb:180:in `block in serve'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application.rb:153:in `fork'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application.rb:153:in `serve'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application.rb:128:in `block in run'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application.rb:122:in `loop'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application.rb:122:in `run'
    from /Users/bli1/.rvm/gems/ruby-2.1.3/gems/spring-1.1.3/lib/spring/application/boot.rb:18:in `<top (required)>'
    from /Users/bli1/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/bli1/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'2.1.3 :022 > user.contact_requests.messages = "dsfkjsdklfhdsf"

這是我的架構:

在此處輸入圖片說明

楷模:

class User < ActiveRecord::Base
  # before_save { |user| user.email = user.email.downcase }
  has_many :contact_requests
  # validate the presence of the attributes
  validates(:first_name, presence: true)
  validates(:last_name, presence: true)
  validates(:email, presence: true)
  accepts_nested_attributes_for :contact_requests

end

class ContactRequest < ActiveRecord::Base
  belongs_to :user
  validates :user_id, presence: true
  validates :message, presence: true, length: { maximum: 500 }
end

當我做:

user = User.new
user.email = "email@email.com"
user.last_name = "li"
user.first_name = "brad"
user.phone_number = "21321323"

一切正常,但是當我這樣做時

user.contact_requetst.message = "jdksfhjskdhfd"

我收到上面顯示的錯誤。

user.save將只保存users部分

這是因為user.contact_requests是對象的集合。 您不能以這種方式設置要收集的屬性,而是應該選擇一個具有

user.contact_requests.first.message = "jdksfhjskdhfd"

例如,或者,如果要為所有請求設置消息,則應

user.contact_requests.map { |r| r.message = "jdksfhjskdhfd" }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM