2014-09-22 2 views
3

Я использую рамки rails 4.0.2. У меня есть изображение леса и на странице шоу «picture». Я пытаюсь добавить простую встроенную форму, чтобы переслать это на адрес электронной почты.
После ввода сообщения электронной почты и нажатия кнопки «вперед» он должен отправить текущую ссылку с изображением в электронном письме. Но я изо всех сил пытаюсь добиться этого. Я создал контроллер «forward_picture» с действием «create» и добавил его как ресурс в файле config/routes. Затем я создал форму в виде изображения следующим образом.рельсы 4 form_tag использование

просмотров/фото/show.html.erb

... 
<%= form_tag(:controller => "forward_picture", :action => "create") do %> 
    <%= hidden_field_tag :picture_id, params[:@picture.id] %> 
    <%= label_tag :email %> 
    <%= text_field_tag :email, params[:email] %> 
    <%= submit_tag "Forward" %>  
<% end %> 

Является ли это правильный способ встроить форму, передать параметры и вызвать соответствующее действие (создать) в forward_picture_controller? Как использовать доступ к параметрам в контроллере, учитывая сильную политику параметров в рельсах 4? В контроллере я могу создать соответствующий URL для отправки данного адреса электронной почты.

Любая помощь приветствуется.

ответ

5

Обычно рекомендуется создавать маршруты и давать им имена. В вашем routes.rb файле:

post :forward_picture, to: "forward_picture#create", as: :forward_picture 

Последний атрибут, определенный здесь:

as: :forward_picture 

Создаст «имя» для вашего маршрута, и, следовательно, создать метод name_path, который может быть отозваны из любого Посмотреть. Ваша форма может затем использовать его как это:

<%= form_tag forward_picture_path do %> 

Что касается параметров, вы должны быть в состоянии получить от Params [:] или по электронной почте Params [: picture_id]. Сильные параметры используются только при массовом присвоении, т. Е. Product.create (params [: product]), где параметры могут иметь несколько атрибутов для модели продукта. Вот когда вы хотите дезинформировать хеш params [: product], чтобы убедиться, что вы разрешаете только то, что вам нужно. Это когда вы используете безопасные параметры.

+0

Я попробую это и вернусь к вам. Спасибо Марсело. – Atarang

Смежные вопросы