RoR известен как «соглашение о конфигурации», поэтому, скорее всего, мой вопрос снят - я не знаю соглашения, которому я должен следовать.
У меня есть 2 объекта модели, ParseException
и ParseResolution
, и ParseResolution belongs_to
ParseException.
Я просто делаю админ-панель из лесов Rails и хочу добавить новый объект ParseResolution, связанный с объектом ParseException.
После генерации контроллеров для обеих моделей я добавил ссылку на parse_resolution/new
из parse_exception/index
. Поскольку ParseResolution необходимо знать, какое ParseException оно разрешает (own_to), я также передаю его в качестве параметра:
<td><%= link_to 'Add Resolution', new_parse_resolution_path(:parse_exception => parse_exception) %></td>
Пока все хорошо.
В моем контроллере ParseResolution у меня есть:
def new
@parse_resolution = ParseResolution.new
@parse_resolution.parse_exception = ParseException.find(params[:parse_exception])
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @parse_resolution }
end
end
Пока все хорошо, так как я могу получить доступ к объекту ParseException внутри моего файла ERB и отобразить его детали.
Однако, когда я нажимаю кнопку «Создать», чтобы добавить свой новый объект ParseResolution, метод save жалуется, что я не предоставляю ему ParseException, который является обязательным столбцом.
Я пытался сделать это со скрытым полем:
<%= hidden_field(:parse_resolution, :parse_exception) %>
Но это просто преобразует объект ParseException в строку:
<input id="parse_resolution_parse_exception" name="parse_resolution[parse_exception]" type="hidden" value="#<ParseException:0x1108a8930>" />
Что явно не сработает.
ОК, поэтому я снова пытаюсь не ненавидеть Ruby on Rails за все его вуду-подобные соглашения. Может, кто-нибудь расскажет мне, как лучше всего делать то, что я пытаюсь сделать?