Как я могу достигнуть строки запроса и параметров URL в a link_to
объявление блока? Прямо сейчас у меня есть это, которое работает:
<%= link_to 'Edit', :edit, :type => 'book', :id => book %>
Вышеупомянутые работы и выводы:
http://localhost:3000/books/edit/1?type=book
То, что я хочу сделать, является чем-то вроде этого:
<% link_to :edit, :type => 'book', :id => book do %>
...
<% end %>
Но вышеупомянутые выводы формата:
http://localhost:3000/books/edit/
Который не является тем, что я ищу... Я хочу, чтобы это произвело URL как предыдущий пример.
Как я могу достигнуть этого?
Попробуйте Follwing
<% link_to(:edit, :type => 'book', :id => book) do %>
...
<% end %>
или для получения того же URL-адреса Используйте
<% link_to(:action=>'edit', :type => 'book', :id => book) do %>
...
<% end %>
Ruby не знает, отправляете ли вы блок do ... end
в link_to
или book
, и отправляет его на ] книга
, потому что она ближе к блоку. book do ... end
возвращает nil
, поэтому у вас остается link_to: edit,: type => 'book',: id => nil
. Вам нужно будет заключить параметры в скобки, и пока вы это делаете, я бы переписал их, чтобы они были более понятными, с настройкой контроллера, действия и идентификатора: link_to {: controller => "books",: action => "edit",: id => book} do ... end
в файле mime_types.rb добавить:
Mime :: Type.register "text / application",: book
link_to
принимает те же параметры, что и url_for
. Сказав это, нет опции Как упомянул Том в ответе на этот ответ, передача блока в : type
, и она на самом деле не принимает блоки, поэтому я предполагаю, что ваш второй пример работает потому, что он находится в пределах Книги Посмотреть. link_to
может использоваться в качестве замены первого аргумента (текста ссылки).
Если Book является ресурсом, вы можете получить помощник link_to
для генерации искомого URL, передав ему один из удобных, автоматически сгенерированных маршрутов ресурсов, которые рельсы создают для вас. Запустите rake routes
перед тем, как попробовать это:
<%= link_to "Edit", edit_book_path(book) %>
В противном случае вы можете явно указать, какой контроллер / действие вы хотите связать:
<%= link_to "Edit", :controller => "books", :action => "edit", :id => book %>
Удачного взлома.
РЕДАКТИРОВАТЬ: Чуть не забыл, вы МОЖЕТЕ добавлять строки запроса, минуя их, ПОСЛЕ объявления идентификатора объекта, на который вы ссылаетесь.
<%= link_to "Edit", edit_book_path(book, :query1 => "value", :query2 => "value")
Будет ли продукт / books / 1 / edit? Query1 = value & query2 = value
. Или:
<%= link_to "Edit", :controller => "books", :action => "edit", :id => book, :query1 => "value", :query2 => "value" %>