В настоящее время я пытаюсь использовать link_to
с вспомогательным методом, который создает ссылки для динамического создания элементов, а не с помощью методов new_object_path
.Rails 3 допускает полиморфные URL-адреса, которые fl00r помог мне идентифицировать и использовать в форме, которую я искал изначально.Однако, хотя метод Rails 'polymorphic_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-адреса.
: order_id работает.Однако: photo_id, похоже, не переносится на новую страницу OrderItems #.Я создал text_field
для :photo_id
, и он каждый раз пуст.Это в attr_accessible
.Я не понимаю, почему это не работает.