Теперь, когда весь хэш params проходит, форма может найти правильную фотографию при создании нового элемента заказа.
час пытаюсь использоватьlink_to
с вспомогательным методом, который создает ссылки для динамического создания элементов, а не с помощьюnew_object_path
методы. Rails 3 допускает полиморфные URL-адреса, которые fl00r помог мне идентифицировать и использовать в форме, которую я искал изначально. Однако при использовании Railspolymorphic_url
метод, как показано здесь, передает аргумент в запросе http, поле связанной формы на возвращаемой странице не заполняется и не устанавливается. Я пытаюсь построитьorder_item
изorder
который также построен изphoto
.
Кто-нибудь видит, что здесь происходит не так? Связанный код ниже:
# the helper method
def add_cart_button_for(arr, attr_hash={})
link_to button(:cart_add), polymorphic_url( [:new] + arr, attr_hash )
end
# the call in index.html.haml
= add_cart_button_for [current_order, :order_item], :photo_id => photo.id
# _form.html.haml for order_item
- form_for [ @order, @order_item ] do |f|
%p
= f.label :photo_id
%br
= f.text_field :photo_id
Вот оригинальный вопрос:Я пытаюсь создать ссылку для создания[:new, @order, @order_item]
где@order_item.photo_id
можно перейти по ссылке.
Теперь, я не уверен, имеет ли это большой смысл, поэтому я попытаюсь прояснить мою проблему здесь.
Из того, что я видел, в Rails 3 появился новый синтаксис для связи с действиями с ресурсами с использованием массива, структурированного как[:action, object]
или для глубоко вложенных ресурсов,[:action, parent, child]
, Для этого конкретного примера я используюlink_to [:new, @order, :order_item]
, Эти кнопки будут прикреплены к каждой фотографии в фотогалерее.
Можно ли пройтиid
фото как атрибутphoto_id
нового заказа?
Пока я пробовалlink_to [:new, @order, :order_item], :photo_id => photo.id
, но это не похоже на работу. Я также пытался положить:photo_id
в явном хеше. Есть ли способ следовать этому новому синтаксису и достичь этой функциональности?
Обновление: я действительно надеюсь найти что-то вроде:
link_to "new photo", [:new, @order, :order_item => {:photo_id => photo.id}]
где я вроде делаю: build, но не только с атрибутами поставляемой модели построителя.
ОБНОВИТЬ 11 апреля 2011 У меня все работает, я могу передать атрибут в запрос get, используяpolymorphic_url
как видно ниже:
# the helper method
def add_cart_button_for(arr, attr_hash={})
link_to button(:cart_add), polymorphic_url( [:new] + arr, attr_hash )
end
# the call in index.html.haml
= add_cart_button_for [current_order, :order_item], :photo_id => photo.id
Кажется, это должно работать. Я вижу запрос get, который, кажется, работает как положено:
Started GET "/orders/1/order_items/new?photo_id=130" for 127.0.0.1 at 2011-04-11 18:11:07 -0400
Processing by OrderItemsController#new as HTML
Parameters: {"photo_id"=>"130", "order_id"=>"1"}
и URL-адрес, как и ожидалось, но форма, кажется, не перехватывает эту переменную из URL-адреса.
The: order_id работает. Однако: photo_id, похоже, не переносится на новую страницу OrderItems #. Я создалtext_field
за:photo_id
и каждый раз пусто. Это вattr_accessible
, Я не понимаю, почему это не работает.