Я хотел бы создать 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 Еще один вариант? Какой из вышеперечисленных методов был бы предпочтительнее? Как реализовать любой из перечисленных выше вариантов?
Это чувствует себя грязным. Должен ли я придерживаться этой логики? –
Вы заявляете, что хотите отправить его как параметр, вы не можете отправить параметр, если вы не поместите его в свою форму, используя тег ввода. Как вы заявили, вы также можете напрямую получить доступ к своему идентификатору агентства на своем контроллере, поскольку он хранится в сеансе. – Lymuel
Ну, я не был уверен, как это сказать. Я хочу иметь доступ к нему в методе Alert.create. Если бы я не хранил его в сеансе, есть ли лучший способ организовать мой код для доступа к нему? –