Установка динамического пути ссылки с параметрами 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)
Другие вопросы по тегам