【发布时间】:2015-02-24 10:41:19
【问题描述】:
我有一个包含两个选择框的视图:公司和员工。 Both have a blank option and when a company is selected, it populates the employees based on the selected company.这工作得很好。我的问题是,当我提交未通过验证的表单(如预期的那样)并且一旦“新”视图在 extensions#create 中再次呈现后我再次选择一家公司,我的“get”AJAX 调用已从 /servers /1/extensions/get_company_employees(正确) 到 /servers/1/get_company_employees(不正确) 并返回 404 Not found。为什么会发生这种情况,我应该怎么做才能解决这个问题?下面列出了所有相关代码
routes.config
resources :servers do
scope module: 'servers' do
resources :extensions, shallow: true
end
end
# Ajax call
get 'servers/:id/extensions/get_company_employees', to: 'servers/extensions#get_company_employees', as: 'get_company_employees'
app/controllers/servers/extensions_controller.rb
class Servers::ExtensionsController < ApplicationController
def get_company_employees
@server = Server.find(params[:id])
@extension = @server.extensions.build
@path = [@server, @extension]
@companies = Company.all
@employees = Employee.where("company_id = ?", params[:company_id])
respond_to do |format|
format.js
end
end
def new
@server = Server.find(params[:server_id])
@extension = @server.extensions.build
@path = [@server, @extension]
@companies = Company.all
@employees = Employee.none
end
def create
@server = Server.find(params[:server_id])
@extension = @server.extensions.build(extension_params)
@extension.password = "pass"
if @extension.save
flash[:success] = "Successfully created extension"
redirect_to @extension
else
@path = [@server, @extension]
@companies = Company.all
@employees = Employee.none
flash.now[:error] = "Failed to create extension"
render "new"
end
end
private
def extension_params
params.require(:extension).permit(:value, :password, :employee_id, :server_id, :phone_id)
end
end
app/views/servers/extensions/_form.html.erb
<%= form_for(@path) do |f| %>
<p>
<%= label_tag(:company) %>
<%= select_tag "company", options_from_collection_for_select(@companies, "id", "name"), include_blank: "Select a company" %>
</p>
<p>
<%= f.label(:employee) %>
<%= f.collection_select :employee_id, @employees, :id, :full_name, include_blank: "Select an employee" %>
</p>
<p>
<%= f.submit "Submit" %>
</p>
<% end %>
app/views/servers/extensions/get_company_employees.js.coffee
$("#extension_employee_id").empty()
.append("<option>Select an employee</option>")
.append("<%= j options_from_collection_for_select(@employees, :id, :full_name) %>")
app/assets/javascripts/servers/extensions.coffee
$ ->
$(document).on 'page:load', '#company', (evt) ->
$.ajax 'get_company_employees',
type: 'GET'
dataType: 'script'
data: {
company_id: $("#company option:selected").val()
}
$(document).on 'change', '#company', (evt) ->
$.ajax 'get_company_employees',
type: 'GET'
dataType: 'script'
data: {
company_id: $("#company option:selected").val()
}
【问题讨论】:
标签: ruby-on-rails ajax ruby-on-rails-4 coffeescript