Ruby on rails 在Rails中分配ID
我正在开发一个测试应用程序,它有两个模型——客户和工作。一个客户有很多工作,一个工作属于一个客户 在“客户视图”页面上,有一个链接_,用于创建新工单,如下所示:Ruby on rails 在Rails中分配ID,ruby-on-rails,routes,Ruby On Rails,Routes,我正在开发一个测试应用程序,它有两个模型——客户和工作。一个客户有很多工作,一个工作属于一个客户 在“客户视图”页面上,有一个链接_,用于创建新工单,如下所示: <%= link_to "New Job", new_job_path %> resources :job_assignments, :only => [:create] 我已经在jobs表上创建了customer_id作为外键,并且可以使用Rails控制台手动将作业分配给customer id 我不知道如何从
<%= link_to "New Job", new_job_path %>
resources :job_assignments, :only => [:create]
我已经在jobs表上创建了customer_id作为外键,并且可以使用Rails控制台手动将作业分配给customer id
我不知道如何从这里开始来实现我的目标(当从客户视图页面单击新作业链接时,让客户id自动分配给作业id)
关于我是否在正确的轨道上或者我错过了什么,有什么想法或想法吗
增编:
_form.html.erb:
<%= form_for(@job) do |f| %>
<% if @job.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@job.errors.count, "error") %> prohibited this job from being saved:</h2>
<ul>
<% @job.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :installation %><br>
<%= f.text_field :installation %>
</div>
<div class="field">
<%= f.label :install_date %><br>
<%= f.text_field :install_date %>
</div>
<div class="field">
<%= f.label :delivery %><br>
<%= f.text_field :delivery %>
</div>
<div class="field">
<%= f.label :box_count %><br>
<%= f.number_field :box_count %>
</div>
<div class="field">
<%= f.label :room_type %><br>
<%= f.text_field :room_type %>
</div>
<div class="field">
<%= f.label :material %><br>
<%= f.text_field :material %>
</div>
<div class="field">
<%= f.label :exterior_colour %><br>
<%= f.text_field :exterior_colour %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
禁止保存此作业:
增编2:
控制器的作业:
class JobsController < ApplicationController
before_action :set_job, only: [:show, :edit, :update, :destroy]
def index
@jobs = Job.all
end
def show
end
def new
@job = Job.new
end
def edit
end
def create
@job = Job.new(job_params)
respond_to do |format|
if @job.save
format.html { redirect_to @job, notice: 'Job was successfully created.' }
format.json { render action: 'show', status: :created, location: @job }
else
format.html { render action: 'new' }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @job.update(job_params)
format.html { redirect_to @job, notice: 'Job was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
def destroy
@job.destroy
respond_to do |format|
format.html { redirect_to jobs_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_job
@job = Job.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def job_params
params.require(:job).permit(:job_number, :installation, :install_date, :delivery, :box_count, :room_type, :material, :exterior_colour)
end
end
类作业控制器
至少在填充客户id
字段时,您不需要作业分配控制器
您应该通过cusmoters
添加嵌套的资源路由,其中包含作业
。在routes.rb中
resources :customers do
resources :jobs
end
将链接修改为(通过rake routes
交叉检查路径名,并且customer\u id
是此链接将为其创建作业的客户的id
):
而不是
@job = Job.new
它将预先填充您的客户id
阅读您是否希望自动分配客户id的值
以存储在作业
中?发布您的作业
控制器
和新建.html.erb
或表单.html.erb
您需要向我们显示添加新作业的查看代码页面(不是客户)@RAJ我的错误,以上表格已相应更改。谢谢。。不管怎样,看看我的答案,我想这可以解决你的问题。我得到了一个未定义的局部变量,或者当前用户的方法错误。请记住-用户登录并在应用程序中填充客户和作业。因此,客户从不登录。我只想在客户页面上有一个链接来创建一个新作业,并将该客户id拉入作业。非常接近-现在当我单击新作业链接时,我得到一个错误,该错误状态为:找不到id=customer\u id的客户。因此,现在它正在查找id,但没有将其拉下来。抱歉,我要提到的是,您需要在link\u to
中动态添加要为其创建作业的客户id,以代替customer\u id
,我不知道如何操作-您有我可以阅读的资源吗?
<%= link_to "New Job", new_customer_job_path(customer_id) %>
customer = Customer.find(params[:customer_id])
@job = customer.jobs.build
@job = Job.new