2012-06-09 2 views
0

Я новичок в программировании и рубине на рельсах. Я следил за http://ruby.railstutorial.org/, а затем я начал смотреть эпизоды с http://railscasts.com. То, что я пытаюсь сделать, это то, что «Обработка нескольких моделей в одной форме». Ниже вы увидите мои модели и их ассоциации, а также вид формы, который я пытаюсь получить от пользователей.Предупреждение о массовом назначении при использовании вложенных атрибутов

Мое моделирование таково;

Есть работодатели, работодатели имеют интервью и интервью, у которых есть вопросы.

Customquestion модель:

class Customquestion < ActiveRecord::Base 
    attr_accessible :content 
    belongs_to :interview 

    validates :content, length: {maximum: 300} 
    validates :interview_id, presence: true 
end 

Интервью модель:

class Interview < ActiveRecord::Base 
    attr_accessible :title, :welcome_message 
    belongs_to :employer 
    has_many :customquestions, dependent: :destroy 
    accepts_nested_attributes_for :customquestions 

    validates :title, presence: true, length: { maximum: 150 } 
    validates :welcome_message, presence: true, length: { maximum: 600 } 
    validates :employer_id, presence: true 
    default_scope order: 'interviews.created_at DESC' 
end 

Форма для создания нового интервью;

<%= provide(:title, 'Create a new interview') %> 
<h1>Create New Interview</h1> 

<div class="row"> 
    <div class="span6 offset3"> 
    <%= form_for(@interview) do |f| %> 
    <%= render 'shared/error_messages_interviews' %> 

     <%= f.label :title, "Tıtle for Interview" %> 
     <%= f.text_field :title %> 

     <%= f.label :welcome_message, "Welcome Message for Candidates" %> 
     <%= f.text_area :welcome_message, rows: 3 %> 

     <%= f.fields_for :customquestions do |builder| %> 
     <%= builder.label :content, "Question" %><br /> 
     <%= builder.text_area :content, :rows => 3 %> 
     <% end %> 
     <%= f.submit "Create Interview", class: "btn btn-large btn-primary" %> 
    <% end %> 
    </div> 
</div> 

Когда я заполняю форму необходимой информацией и отправляю ее, я получаю следующую ошибку;

Can't mass-assign protected attributes: customquestions_attributes 

Application Trace | Framework Trace | Full Trace 
app/controllers/interviews_controller.rb:5:in `create' 
Request 

Parameters: 

{"utf8"=>"✓", 
"authenticity_token"=>"cJuBNzehDbb5A1Zb14BjBfz1eOsjBCDzGhYKT7q6A0k=", 
"interview"=>{"title"=>"", 
"welcome_message"=>"", 
"customquestions_attributes"=>{"0"=>{"content"=>""}}}, 
"commit"=>"Create Interview"} 

Надеюсь, что я предоставил вам достаточно информации, чтобы вы поняли, что является проблемой в этом случае.

Спасибо заранее

ответ

2

Просто следовать тому, что написано в сообщении об ошибке: попробуйте добавить attr_accessible :customquestions_attributes к Interview модели:

class Interview < ActiveRecord::Base 
    attr_accessible :title, :welcome_message, :customquestions_attributes 
... 
+0

Решена проблема спасибо, но теперь новая проблема возникла. Новая проблема не связана с этим, но, возможно, у вас может быть идея об этом. Создание действия в InterviewController не получает идентификатор интервью и не помещает его в таблицу базы данных пользовательских запросов. Мое текущее действие для контролеров интервью заключается в следующем, и я знаю, что я должен что-то добавить к нему: 'def create @interview = current_employer.interviews.build (params [: interview]) if @ interview.save flash [: успех] = «Интервью создано!» redirect_to @interview else render 'new' end end @ @ mikhail-d – hayri

+0

@hayri, извините, но я не могу найти здесь ошибку. Может быть, я не понял вопроса ... Если вы застряли с ним - не стесняйтесь задавать новый вопрос. –

+0

Я действительно застрял в этом, теперь, когда я отправляю форму, хотя я заполняю все поля, возникает вопрос, что «Опрос по собеседованию не может быть пустым». И я уверен, что это из-за недостающего кода в контролере Интервью. Как я опубликовал в последнем комментарии, вы можете увидеть мое действие create в контролере интервью, и я чувствую, что я должен добавить что-то к этому создающему действию, чтобы таблица базы данных пользовательских запросов имела доступ к interview_id. Прямо сейчас создайте действие, не получив интервью_ид, и это вызывает ошибку «Опрос пользовательских запросов не может быть пустым». – hayri

Смежные вопросы