我想创建一个恰好是模型的估算表单。这个表格有 客户信息也是一个模型,车辆信息是另一个嵌套在客户资源上的模型。员工姓名(也是模型)。我希望能够在客户上选择使用选择框,这会将我引导至客户车辆列表,然后能够从模型员工列表中填充谁是执行估算的员工。 (我正在学习ROR,所以请向我道歉可能没有正确的术语来解释:我也能够为客户生成选择框但是不能超过它。换句话说没有甚至能够在一个小型箱上为每个顾客提供车辆。请帮助。
型号:
class Estimate < ActiveRecord::Base
belongs_to :customer
belongs_to :vehicle
belongs_to :employee
has_many :lines_in_estimates
end
class Customer < ActiveRecord::Base
has_many :vehicles
has_many :estimates
validates :first_name, presence: true
validates :last_name, presence: true
validates :h_phone, presence: true
validates :c_phone, presence: true
validates_format_of :email, with: /\A[\w]([^@\s,;]+)@(([\w-]+\.)+ (com|edu|org|net|gov|mil|biz|info))\z/i
def first_name_and_last_name
"#{first_name} #{last_name}"
end
end
class Vehicle < ActiveRecord::Base
belongs_to :customer
end
class Employee < ActiveRecord::Base
end
控制器:
class EstimatesController < ApplicationController
before_action :set_estimate, only: [:show, :edit, :update, :destroy]
before_action :set_customer, only: [:show, :edit, :update, :destroy]
def index
@estimates = Estimate.all
end
def show
end
def new
@estimate = Estimate.new
end
private
def set_estimate
@estimate = Estimate.find(params[:id])
end
def set_customer
@estimate = Estimate.find(params[:id])
end
def set_vehicle
@vehicle = @customer.vehicles.find(params[:id])
end
def estimate_params
params.require(:estimate).permit(:statetax, :muntax, :subtotal, :total, :created_at, :updated_at,
:customer_id, :vehicle_id, :employee_id)
end
def customer_params
params.require(:customer).permit(:first_name, :last_name, :addr1, :addr2, :city, :state, :zip, :h_phone, :c_phone, :email)
end
end
形式:
<%= form_for(@estimate) do |f| %>
<% if @estimate.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@estimate.errors.count, "error") %> prohibited this employee from being saved:</h2>
<ul>
<% @estimate.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :Choose_Customer %><br>
<%= collection_select(:estimate, :customer_id, Customer.all, :id, :first_name_and_last_name, prompt: true ) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:0)
如果我正确理解您的使用案例,客户有很多车辆,车辆有很多估计。通过正确设置Rails模型,您可以调用customer.vehicles
来返回该客户拥有的一系列车辆。通过迭代,您可以调用vehicle.estimates
来获取每辆车的估算数组。
class Customer << ActiveRecord::Base
has_many :vehicles
end
class Vehicle << ActiveRecord::Base
belongs_to :customer
has_many :estimates
end
class Estimate << ActiveRecord::Base
belongs_to :vehicle
end
在针对车辆和估算的create_table迁移中,您需要分别t.belongs_to :customer
和t.belongs_to :vehicle
,以便在您的数据库中创建允许Rails建立连接的外键。
使用has_many
时以及命名表时使用复数名称。
设置并运行后,为了获得客户的所有估算值,我认为您需要做的就是将has_many :estimates, through :vehicles
添加到客户模型中。这将使customer.estimates
能够返回所有估算值。我不太确定我的理由,所以先让其他人先工作。
对此here进行了一些阅读。