Передача параметров из представления в контроллер

У меня есть вопрос с новичком. Я пытаюсь передать переменную из моего представления в мой контроллер. В любом случае, мой метод в моем контроллере может получать переменные из моего представления?

Post view: show.html.erb:
....
<%=link_to "Add relationship", :method => :add_relationship(@rela) %>

Controller: post.controller.rb:

 def add_relationship(rela)
  @post = Post.find(params[:id])

  if current_user.id == @post.user_id
    @post.rel_current_id = rela.id
    @post.save
    redirect_to relationships_url
  else
    redirect_to posts_url, :notice => "FY!"
  end
end

Заранее спасибо :)

Ответ 1

Вы можете добавить информацию к хэшу params прямо через link_to. Я не совсем уверен, что вы пытаетесь сделать, но недавно я сделал что-то подобное, чтобы добавить тип электронной почты, который я хотел, когда я ссылаюсь на новое письмо

<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %>

Теперь мои параметры выглядят так:

{"type"=>"thanks", "action"=>"new", "controller"=>"emails", "invoice_id"=>"17"}

Я могу получить доступ к типу через params

email_type = params[:type]

Вместо строки, если вы перейдете в переменную экземпляра @rela, вы получите объект_ид в хеше params.

В приведенном ниже комментарии я добавляю свои маршруты, чтобы показать, почему работает путь new_invoice_email_path:

resources :invoices do
  resources :emails
end

Ответ 2

Когда приходит запрос, контроллер (и любые вызовы модели) обрабатывается первым, а затем код представления обрабатывается последним. Представление может вызывать методы в помощниках, но не может ссылаться на функции обратно в контроллер.

Однако, как только страница отображается, вы можете отправить информацию обратно контроллеру в качестве части нового запроса или использовать ajax/JQuery (и т.д.) Для удаленного вызова функции контроллера.

Это помогает?