У меня есть модель для «timeline_event», которая принадлежит к sales_opportunity. Например, это может быть «вызвать перспективу» или аналогично, с параметром due_date, activity_details (необязательно) и флажком, чтобы сказать, полнота или нет. Это прекрасно работает. Я могу добавить новые timeline_events в базу данных через modal на странице sales_opportunity, которая также отлично работает. Однако, когда я пытаюсь отредактировать timeline_event (через действие контроллера редактирования timeline_events), hidden_field для sales_opportunity_id отказывается отбирать значение (оно не имеет никакого значения). Даже когда я пытаюсь установить значение:Почему мой Rails hidden_field не получает никакой ценности, когда все остальные поля работают нормально?
<%= f.hidden_field :sales_opportunity_id, :value => @sales_opportunity.id %>
Это не добавит значения в hidden_field. Я пробовал перемещать поле внутри группы форм, но ничего не работает. У меня есть другие формы, похожие на мою модель, которые отлично работают, но по какой-то причине это не работает - может ли кто-нибудь помочь?
Моя форма:
<%= form_for(@timeline_event, :html => {:class => "form-horizontal"}) do |f| %>
<div class="form-group">
<%= f.hidden_field :sales_opportunity_id %>
<%= f.label :activity, :class => "col-md-4 control-label" %>
<div class ="col-md-8">
<%= f.text_field :activity, :placeholder => "Enter activity details" %>
</div>
</div>
<div class="form-group">
<%= f.label :due_date, :class => "col-md-4 control-label" %>
<div class ="col-md-8">
<div class='input-group date' id='datetimepicker' data-date-format="YY.MM.DD">
<%= f.text_field :due_date, class: "form-control", data: { date_format: 'YYYY/MM/DD' }, :placeholder => "YYYY/MM/DD" %>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<%= f.label :event_notes, 'Activity Details', :class => "col-md-4 control-label" %>
<div class ="col-md-8">
<%= f.text_area(:event_notes, :placeholder => "Put any notes about the activity here") %>
</div>
</div>
<div class="col-md-6 col-md-offset-4">
<div class="checkbox input">
<label>
<%= f.check_box :completed %> Task Completed?
</label>
</div>
<br>
</div>
<%= @sales_opportunity.id %>
<%= f.submit "Save", class: "btn btn-large btn-success" %>
<% end %>
* Примечание - я включаю линию <% = @ sales_opportunity.id%> здесь, и это делает вывод правильный sales_opportunity_id для timeline_event. Все остальные поля (activity, due_date, completed) заполнены информацией о timeline_event, которую я пытаюсь редактировать.
Timeline_Events_Controller:
class TimelineEventsController < ApplicationController
before_action :set_timeline_event, only: [:show, :edit, :update, :destroy]
before_action :signed_in_user, only: [:edit, :update, :show, :index]
before_action :correct_org, only: [:edit, :update, :show, :index]
# GET /timeline_events
# GET /timeline_events.json
def index
@timeline_events = TimelineEvent.all
end
# GET /timeline_events/1
# GET /timeline_events/1.json
def show
end
# GET /timeline_events/new
def new
@timeline_event = TimelineEvent.new(sales_opportunity_id: params[:sales_opportunity_id])
end
# GET /timeline_events/1/edit
def edit
@timeline_event = TimelineEvent.find(params[:id])
@sales_opportunity = @timeline_event.sales_opportunity
end
# POST /timeline_events
# POST /timeline_events.json
def create
@timeline_event = TimelineEvent.new(timeline_event_params)
@sales_opportunity = @timeline_event.sales_opportunity
respond_to do |format|
if @timeline_event.save
format.html { redirect_to @timeline_event.sales_opportunity, :flash => {:success => 'Timeline event was successfully created.'} }
format.json { render :show, status: :created, location: @timeline_event }
format.js
else
format.html { render :new }
format.json { render json: @timeline_event.errors, status: :unprocessable_entity }
format.js { render json: @sales_opportunity.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /timeline_events/1
# PATCH/PUT /timeline_events/1.json
def update
respond_to do |format|
if @timeline_event.update(timeline_event_params)
format.html { redirect_to @timeline_event.sales_opportunity, :flash => {:success => 'Timeline event was successfully updated.'} }
format.json { render :show, status: :ok, location: @timeline_event }
else
format.html { render :edit }
format.json { render json: @timeline_event.errors, status: :unprocessable_entity }
end
end
end
# DELETE /timeline_events/1
# DELETE /timeline_events/1.json
def destroy
@timeline_event.destroy
respond_to do |format|
format.html { redirect_to timeline_events_url, :flash => {:success => 'Timeline event was successfully destroyed.'} }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_timeline_event
@timeline_event = TimelineEvent.find(params[:id])
end
def timeline_event_params
params.require(:timeline_event).permit(:sales_opportunity_id, :due_date, :activity, :completed, :event_notes)
end
#before filters
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in." unless signed_in?
end
end
def correct_org
timeline_org = @timeline_event.sales_opportunity.user.organization
@user = current_user
if @user.organization_id == timeline_org.id
else
redirect_to root_url, notice: "You are not permitted to visit that page. Please create an account or sign in"
end
end
end
Моя timeline_event модель:
class TimelineEvent < ActiveRecord::Base
belongs_to :sales_opportunity
validates :activity, presence: true
validates :due_date, presence: true
validates :sales_opportunity_id, presence: true
end
Я могу только представить себе, что это какая-то ошибка синтаксиса или другая глупая ошибка с моей стороны, потому что я просто не вижу ничего плохого с кодом (он идентичен всем другим формам на моем сайте). Может ли кто-нибудь увидеть, где я иду не так, пожалуйста?
Спасибо!
Спасибо, Роб - это действительно решило проблему. Ранее я использовал ту же форму для добавления нового timeline_event и редактирования timeline_event, но теперь я использую Modal для добавления нового, это больше не нужно. Ваши изменения решили проблему - спасибо! – Zoinks10