2010-04-26 3 views
7

Как я могу получить строку запроса и параметры URL в объявлении блока link_to? Прямо сейчас, у меня есть это, который работает:Rails: link_to с параметрами блока и GET?

<%= 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-адрес, как в предыдущем примере.

Как я могу это достичь?

ответ

0

Try Follwing

<% link_to(:edit, :type => 'book', :id => book) do %> 
    ... 
<% end %> 

или для достижения же URL Используйте

<% link_to(:action=>'edit', :type => 'book', :id => book) do %> 
    ... 
<% end %> 
13

link_to принимает те же параметры, что url_for делает. Сказав это, нет опции :type, и на самом деле она не принимает блоки, поэтому я предполагаю, что причина, по которой работает ваш второй пример, заключается в том, что она находится в пределах представления книги. Как было упомянуто в Tom в ответе на этот ответ, передача блока в link_to может использоваться в качестве замены первого аргумента (текст ссылки).

Если книга является ресурсом, вы можете получить помощника link_to, чтобы сгенерировать URL-адрес, который вы ищете, передав ему один из удобных автоматически генерируемых маршрутов ресурсов, созданных для вас. Запуск rake routes, прежде чем попробовать это:

<%= link_to "Edit", edit_book_path(book) %> 

В противном случае, вы можете явно указать, что контроллер/действие, которое вы хотите перейти по ссылке:

<%= link_to "Edit", :controller => "books", :action => "edit", :id => book %> 

Happy взлому.

EDIT: Почти забыл, что вы можете добавить строки запроса в обход их после того, как вы объявите идентификатор объекта, к которому вы привязываетесь.

<%= 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" %> 
+1

Блок, кажется, способ захвата входа, чтобы поместить внутри ' тегов'. http://railsapi.com/doc/rails-v2.3.5/classes/ActionView/Helpers/UrlHelper.html#M002452 –

0

Рубин не знает, если вы отправляете do ... end блок link_to или book, и посылает его на book, потому что он ближе к блоку. book do ... end возвращает nil, поэтому вы остаетесь с link_to :edit, :type=>'book', :id=>nil. Вам нужно будет скопировать параметры, и, пока вы на нем, я бы переписал его, чтобы быть более понятным с помощью контроллера, действия, установки идентификатора: link_to{:controller=>"books",:action=>"edit",:id=>book}do ... end

0

в mime_types.гь файл добавить:

Mime :: Type.register «текст/приложение»,: книга

+0

добавить тип запроса –

Смежные вопросы