У меня очень распространенная ситуация и решение, но я хотел бы спросить экспертов Rails, можно ли его улучшить.
У меня есть очень типичный контроллер RESTful, где пользователь предоставляет некоторые атрибуты объекта при создании. Существует модель thing
, ThingsController
и различные виды, в том числе new
, create
и частичное _form
.
У вещи есть два атрибута,
- цвет , который устанавливается, когда они нажимают на ссылку, чтобы создать его (т. Е. Ссылку «Создать красное», которая кодирует идентификатор красного цвета в качестве параметра URL)
- описание , которое вводится пользователем в виде вида
Я доволен подходом к работе с атрибутом, таким как описание, которое пользователь указывает в форме, но менее уверен в способе обработки атрибута, который передается через параметры URL, связанные с первым нажмите кнопку.
Это то, чем я сейчас занимаюсь (обратите внимание, что я упустил проверку ошибок, чтобы упростить задачу). Во-первых, мои new
и create
методы в контроллере следующие:
def new
@thing = Thing.new
@thing.color = Color. find(params[:color])
end
def create
@thing = Thing.new(params[:thing])
@thing.color = Color. find(params[:color])
if @thing.save
flash[:notice] = "Successfully created thing."
redirect_to somewhere_url
else
render :action => 'new'
end
end
Представление new
только вызывает частичное _form
, которое выглядит следующим образом:
<% form_for @thing do |f| %>
<%= f.error_messages %>
<%= hidden_field_tag "color", @thing.color.id %>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.submit "Submit" %>
<% end %>
Кажется немного беспорядочным передавать идентификатор цвета в метод create
в качестве параметра URL, помещая скрытое поле в форму. Это выглядит разумно, или есть другой подход, который был бы лучше?