Быстрый вопрос о простой проблеме, с которой я столкнулся (и я хочу использовать как способ понять несколько вещей об ассоциациях и рельсах на более глубоком уровне). Здесь идет:Простая ассоциативная архитектура и реализация в рубине на рельсах
Две связанные модели
class Employee < ActiveRecord::Base
attr_accessible :name
attr_accessible :age
belongs_to :role
attr_accessible :role_id
end
class Role < ActiveRecord::Base
attr_accessible :title
attr_accessible :salary
has_many :employees
end
так, что каждый новый сотрудник имеет фиксированную зарплату, в соответствии с его ролью (что имеет место в большинстве случаев). Однако, что, если я хочу установить другую зарплату для конкретного сотрудника?
Использование simple_form
Я до сих пор написано следующее:
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= f.association :role, as: :radio_buttons, :required => true %>
<%= f.input :salary, label: 'Employee Salary', :input_html => { :value => 0 }, :required => true %>
Что, конечно, дает мне ошибку can't mass assign protected attributes: salary
.
Чтобы исправить это, я добавил attr_accessible :salary
в модель Employee
, но только что сменил ошибку на unknown attribute: salary
.
Из того, что я понимаю, я должен сначала что-то изменить в новом сотруднике, а затем также в модели сотрудника и контроллере, чтобы он принимал значение для зарплаты и умел справляться с этим, не так ли?
Я также видел accepts_nested_attributes_for
, но я не совсем уверен, в какой части ассоциации он должен идти - поскольку я не совсем уверен, что ассоциация также построена наилучшим образом.
Разве это не дублирование кода (с «зарплатой» в обеих моделях я имею в виду)? И не нужен ли другой метод (чтобы заработная плата была установлена как зарплата сотрудника, если она не установлена)? (Я много раз вызываю 'attr_accessible', потому что мне не нравится иметь все атрибуты в одной строке, я думаю, я должен просто назвать его одним и отступом все атрибуты в разных строках, хотя) – sebkkom
Я обновил свой ответ, отвечая на ваши вопросы. – deefour
Большое спасибо, у меня создалось впечатление, что я должен избегать того, что вы описываете, просто отлично. Спасибо за разъяснение о методе «зарплата». :) – sebkkom