Rails: link_to с блоком и GET-параметрами? - PullRequest
7 голосов
/ 26 апреля 2010

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

<%= link_to 'Edit', :edit, :type => 'book', :id => book %>

Выше работает и выводит:

http://localhost:3000/books/edit/1?type=book

Что я хочу сделать, это что-то вроде этого:*

Но вышеприведенный формат выводит:

http://localhost:3000/books/edit/

Это не то, что я ищу ... Я хочу, чтобы он выводил URL, как в предыдущем примере.

Как мне этого добиться?

Ответы [ 4 ]

13 голосов
/ 26 апреля 2010

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 %>

Счастливого взлома.

РЕДАКТИРОВАТЬ: Почти забыл, вы МОЖЕТЕ добавить строки запроса, обходя их, ПОСЛЕ того, как вы объявите id объекта, с которым вы ссылаетесь.

<%= 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" %>
0 голосов
/ 26 апреля 2010

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

Mime :: Type.register "text / application",: book

0 голосов
/ 26 апреля 2010

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

0 голосов
/ 26 апреля 2010

Попробуйте Follwing

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

или для достижения того же URL-адреса. Используйте

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