2016-03-30 1 views
0

Я хотел бы создать form_for в Rails, а также отправить дополнительный параметр с запросом POST.Отправить больше параметров с rails form_for или POST другим способом

У меня есть класс агентства, в котором много предупреждений. Класс Alert принадлежит Агентству. Итак, если у меня есть экземпляр Alert, хранящийся в @alert, я могу сказать @ alert.agency.

В методе Alert.create я должен иметь возможность перенаправлять_ в @ alert.agency. Но я не передал агент_идному методу создания в первую очередь. Я хочу, но я не знаю, как это сделать.


Alert.rb

class Alert < ActiveRecord::Base 
    belongs_to :agency 
end 

Agency.rb

class Agency < ActiveRecord::Base 
    has_one :account, as: :member, dependent: :destroy 
    has_many :alerts 
end 

AlertController.rb

class AlertController < ApplicationController 
    before_action :set_alert, only: [:show, :edit, :update, :destroy] 

    def new 
    @alert = Alert.new 
    end 

    def create 
    @alert = Alert.new(body: params[:body], severity: params[:severity]) 

    respond_to do |format| 
     if @alert.save 
     format.html { redirect_to @alert.agency, notice: 'Alert created.' } 
     format.json { render :show, status: :created, location: @alert} 
     end 
    end 
    end 

    private 
    def set_alert 
     @alert = Alert.find(params[:id]) 
    end 

    def alert_params 
     params.require(:alert).permit(:body, :severity, :agency_id) 
    end 
end 

Я сделал частичное имя _create_alert, которое я разместил с видами агентств. Я показываю его в show.html.erb. Вот он:

_create_post.html.erb

<%= form_tag(alert_create_url) do %> 
    <div class="input-group"> 
     <div> 
     <%= text_area_tag :body, params[:body], placeholder: 'Type alert here' %> 
     </div> 
     <div> 
     <%= number_field_tag :severity, params[:severity], placeholder: 'Type alert here' %> 
     </div> 
     <div> 
     <%= submit_tag "Post", class: 'btn linky' %> 
     </div> 
    </div> 
    <% end %> 

Я поместил это частичный в мнениях/агентствах /, потому что я чувствовал, что это было более естественно поместить его туда. Я не видел, чтобы это было в представлениях/Оповещениях /.

Теперь проблема возникает из-за того, что я не передаю идентификатор агентства с формой_for. Как я могу отправить эту информацию? У меня есть это в сеансе, поэтому я мог бы просто получить к нему доступ из сеанса в Alert.create, но я чувствую, что это небезопасно, а не лучшая практика.


Я думаю, что у меня есть два варианта:

1. Пропустите агентство ID с другими параметрами, используя form_for

2. С точки зрения Agency.show года, когда пользователь попадает в submit, я могу захватить их текст из элементов HTML и передать это с помощью @ agency.alerts.create()

Is th Еще один вариант? Какой из вышеперечисленных методов был бы предпочтительнее? Как реализовать любой из перечисленных выше вариантов?

ответ

0

Добавить

<%= hidden_field_tag "parameter_name", session[:agency_id] %> 

в вашем form_for.

Тогда в вас может получить его в контроллере, как этот

params[:parameter_name] 
+0

Это чувствует себя грязным. Должен ли я придерживаться этой логики? –

+0

Вы заявляете, что хотите отправить его как параметр, вы не можете отправить параметр, если вы не поместите его в свою форму, используя тег ввода. Как вы заявили, вы также можете напрямую получить доступ к своему идентификатору агентства на своем контроллере, поскольку он хранится в сеансе. – Lymuel

+0

Ну, я не был уверен, как это сказать. Я хочу иметь доступ к нему в методе Alert.create. Если бы я не хранил его в сеансе, есть ли лучший способ организовать мой код для доступа к нему? –

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