Установка динамического пути ссылки с параметрами URL в рельсах
Я создаю приложение, в котором я устанавливаю ссылки динамически через параметр URL. Я не могу понять, как заставить link_to работать как с динамической ссылкой, так и с другими параметрами URL.
TemplateController
def next
@template = Template.find(params[:t])
end
Следующий вид
<%= link_to "#{@template.firstpage_link}(:t => @template.id, :prt => 1)" do %><%end%>
Вот что это мне дает:
http://localhost:3000/role/step2_path(:t%20=%3E%20@template.id,%20:prt%20=%3E%201)
Я пробовал кучу способов, и я получаю либо ошибки, либо эту ссылку
2 ответа
То, что вы, кажется, стреляете для чего-то вроде
<%= link_to public_send(@template.firstpage_link, :t => @template.id, :prt => 1) do %>
public_send
позволяет вам вызывать публичный метод, передавая его имя в виде символа или строки.
Однако, могут быть более элегантные способы достичь этого с помощью маршрутизатора Rails, как предлагает @Typpex. Если ничего другого, вы можете немного очистить представление с помощью чего-то вроде этого в помощнике:
def template_path(template)
public_send(template.firstpage_link, :t => template.id, :prt => 1)
end
А потом звоните по вашему мнению.
Я думаю, что вы не используете link_to правильно, если вы посмотрите на API link_to
Вы увидите, что первый параметр - это то, что вы хотите отобразить, а второй - путь рельсов. Вы должны передать свой параметр при определении пути рельсов (или простой URL), такой как
link_to "display text", "#{@template.firstpage_link}?t=#{@template.id}&prt=1"
было бы лучше, если бы вы могли использовать маршрут рельсов, как
template_path(@template, prt: 1)