2016-12-21 4 views
0

레일 5와 포스트 그리드 9.5를 사용하고 있습니다. 내가 만들거나 고유 제한 조건입니다 제목을 기반으로 내 dB/씨앗 파일에 모델을 업데이트하거나 싶은 다음 필드와 모델 ...모델의 속성 중 하나를 기반으로 모델을 만들거나 보급하려면 어떻게해야합니까? (Rails 5)

title    | character varying   | 

있습니다. 그래서 나는 시도했다

scenario = Scenario.find_or_initialize_by_title(s.title) 
scenario.update_attributes(Hash[*@record.attributes.except('created_at','updated_at','id').map { |a| [a.first, nil] }.flatten]) 

그러나 나는 아래의 오류가났다. 모델을 만들거나 업데이트하고 나열된 특성을 제외시키는 올바른 방법은 무엇입니까?

localhost:sims nataliab$ rake db:seed 
rake aborted! 
NoMethodError: undefined method `find_or_initialize_by_title' for #<Class:0x007fb22d28f820> 
Did you mean? find_or_initialize_by 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activerecord-5.0.0.1/lib/active_record/dynamic_matchers.rb:21:in `method_missing' 
/Users/nataliab/Documents/workspace/sims/db/seed/scenarios.rb:165:in `block in <top (required)>' 
/Users/nataliab/Documents/workspace/sims/db/seed/scenarios.rb:164:in `each' 
/Users/nataliab/Documents/workspace/sims/db/seed/scenarios.rb:164:in `<top (required)>' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require' 
/Users/nataliab/Documents/workspace/sims/db/seeds.rb:10:in `<top (required)>' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `load' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `block in load' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `load' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:549:in `load_seed' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:268:in `load_seed' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:196:in `block (2 levels) in <top (required)>' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/gems/rake-11.3.0/exe/rake:27:in `<top (required)>' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval' 
/Users/nataliab/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `<main>' 
Tasks: TOP => db:seed 
(See full trace by running task with --trace) 
+0

시도 :'Scenario.find_or_initialize_by 여기

Scenario.find_or_initialize_by(title: s.title) 

이 방법에 대한 API를 문서에 대한 링크입니다 (제목 : s.title)' –

답변

0

오류 메시지가 당신에게 단서를 제공 Scenario.find_or_initialize_by(title: s.title)

+0

이 실제로 제공해야 질문에 대한 대답 - 그것은 명시된대로 문제를 직접 해결합니다. 불행히도이 버그 아래에는 다른 버그가있는 것 같습니다. –

1

보십시오 :

NoMethodError: undefined method `find_or_initialize_by_title' for #<Class:0x007fb22d28f820> 
Did you mean? find_or_initialize_by 

동적 메소드 이름은 이제 정말 "레일이 승인"당신이 대신 find_or_initialize_by를 사용해야합니다. 이 경우 당신이 사용하는 것 : http://apidock.com/rails/v4.0.2/ActiveRecord/Relation/find_or_initialize_by

+0

감사하지만, 제목이없고 코드를 사용하는 경우, 다음 행은 "NoMethodError : 정의되지 않은 메소드'nil : NilClass"속성에 대한 속성을 제공합니다. 내 목표는 제목이 없으면 개체를 만들거나 존재하는 경우 기존 모델의 특성을 업데이트하는 것입니다. –

+0

그 목표는이 코드가하는 일입니다. 제목이 없다는 것은 무엇을 의미합니까? 시나리오가 없다고 말하는 이유는 무엇입니까? '시나리오 (Scenario) '라는 모델이 있습니까? db에'title '이라는 칼럼이 있나요? 그렇지 않다면이 코드는 실패합니다. –

+0

'find_or_initialize_by'에 대한 API 문서를 살펴보십시오 - 다른 모든 필드 값을 제공하는 블록을 전달하는 방법도 포함합니다. 'find_or_create_by (title : s.title)' –