1

У меня есть форма, которая требует вытащить все объекты в базе данных в поле выбора. Я рассмотрел другие вопросы SO о collection_select и не могу понять, почему я получаю неопределенную ошибку метода.Collection Выберите undefined method in Rails 4

# Loan Application Model 
class LoanApplication < ActiveRecord::Base 
    has_many :loan_securities, :dependent => :destroy 
    accepts_nested_attributes_for :loan_securities, :allow_destroy => true 
end 

# Loan Security Model 
class LoanSecurity < ActiveRecord::Base 
    has_one :security_type 
    accepts_nested_attributes_for :security_type 
end 

# Security Type Model 
class SecurityType < ActiveRecord::Base 
    belongs_to :loan_security 
end 

Каждая заявка на получение займа будет иметь значительные кредитные ценные бумаги, и каждая кредитная гарантия будет иметь один тип безопасности. Я уже засеял DB некоторыми типами безопасности. Пока форма отлично работает с приложением займа к отношениям, связанным с обеспечением кредита.

<%= nested_form_for [@business, @loanapplication], method: :put, :class => "form-horizontal", url: wizard_path, :html => { :multipart => true } do |f| %> 
    <%= f.fields_for :loan_securities, :wrapper => true do |loan_security| %> 
     <%= loan_security.collection_select(:security_type_id, SecurityType.all, :id, :name) %> 
    <% end %> 
<% end %> 

В loanapplications_controller я добавил Params для обеспечения кредита и типа защиты

loan_securities_attributes: [:id, :_destroy, security_type_attributes: [:security_type_id, :name]] 

Сама ошибка:

undefined method `security_type_id' for #<LoanSecurity:xxxxxxx> 
+0

может вы публикуете ошибку undefined_method? –

+0

@NickM Добавлено – Questifer

ответ

1

ли это:

<%= loan_security.collection_select(:security_type_id, ::SecurityType.all, :id, :name) %> 
+0

Я пробовал ваше решение и получил неопределенный метод 'merge 'для: name: Symbol error. Я удалил loan_security с начала кода erb, и он отлично работает. Спасибо за помощь. – Questifer

+0

Прохладный. я исправил ответ, чтобы отразить то, что сработало для вас. Рад, что это сработало. –