Передача параметров из представления в контроллер
У меня есть вопрос с новичком. Я пытаюсь передать переменную из моего представления в мой контроллер. В любом случае, мой метод в моем контроллере может получать переменные из моего представления?
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 (и т.д.) Для удаленного вызова функции контроллера.
Это помогает?