У меня есть ошибка массового назначения, которую я могу исправить только с помощью УЖЕСТВЕННОГО кода. Я, должно быть, делаю что-то не так. Позволь мне объяснить:
У моих клиентов приложения rails много контактов. На странице «Клиент» отображается список контактов, принадлежащих этому клиенту. Я хочу иметь возможность добавлять новый контакт в список. Итак, я передаю клиента контроллеру контактов, используя ...
<%= link_to('new contact', new_contact_path(client_id: @client)) %>
В ContactsController ....
def new
client=Client.find(params[:client_id])
@contact=client.contacts.new
end
def create
@client = Client.find(params[:contact][:client_id])
@contact= @client.contacts.build(params[:contact])
if @contact.save
...
«Сохранить» приводит к неудивительной ошибке:
Невозможно массово назначить защищенные атрибуты: client_id
потому что параметры контакта включают client_id, которого нет (и не должно быть) attr_accessible в модели контакта
Единственный способ, которым я знаю, как решить эту проблему, - установить каждый параметр индивидуально (за исключением client_id) следующим образом:
@contact= @client.contacts.build(first_name: params[:contact][:first_name], last_name: params[:contact][:first_name], email: params[:contact][:email])
Этот подход работает, но все кажется неправильным. Конечно, это более элегантная альтернатива. Любая помощь приветствуется. (да, я новичок в рельсах)