【发布时间】:2017-07-13 01:00:14
【问题描述】:
我不太明白为什么这不起作用。不知何故,我的服务 ID 根本没有通过。我想我对 ID 感到困惑,但这应该可以,但不能。当我点击提交时,它告诉我:找不到带有 'id'= 的服务
这是我的代码:
enquires_controller.rb
class EnquiresController < ApplicationController
before_action :set_enquire, only: [:create, :new]
def new
@enquire = Enquire.new
end
def create
@enquire = Enquire.new(enquire_params)
@enquire.service = @service
if user_signed_in?
@user = current_user
end
if @enquire.save
flash[:thanks] = "Thank you"
redirect_to service_path(@service)
else
render :new
end
end
private
def set_enquire
@service = Service.find(params[:service_id])
end
def enquire_params
params.require(:enquire).permit(:first_name, :last_name, :company,
:message, :email, :phone_number,
:service_id )
end
查询.rb
class Enquire < ApplicationRecord
belongs_to :service
validates :first_name, presence: true
validates :last_name, presence: true
validates :company, presence: true
validates :message, presence: true
validates :email, presence: true
validates :service_id, presence: true
end
使用 @service 的服务视图
show.html.erb
<%= link_to 'Enquire about this Service', new_enquire_path(@service),
class: "btn btn-primary enquire-btn text-middle" %>
服务.rb
has_many :enquires, :dependent => :destroy
routes.rb
resources :services do
resources :enquires, only: [ :new, :create ]
end
resources :enquires, only: [ :new, :create, :index, :show, :destroy ]
最后查询表格 _form.html.erb
<%= simple_form_for(@enquire) do |f| %>
<% if user_signed_in? %>
<div class="form-inputs" id="session-form">
<%= f.input :first_name, as: "hidden", input_html: { value: @user.first_name } %>
<%= f.input :last_name, as: "hidden", input_html: { value: @user.last_name } %>
<%= f.input :email, as: "hidden", input_html: { value: @user.email } %>
<%= f.input :company, as: "hidden", input_html: { value: @user.company_name } %>
<%= f.input :phone_number, autofocus: true, placeholder: "Phone Number", label:false %>
<%= f.input :message, autofocus: true, :input_html => { id: "no-resize" }, placeholder: "Message", label:false %>
</div>
<% else %>
<div class="form-inputs" id="session-form">
<%= f.input :first_name, required: true, autofocus: true, placeholder: "First Name", label:false %>
<%= f.input :last_name, required: true, autofocus: true, placeholder: "Last Name", label:false %>
<%= f.input :email, required: true, autofocus: true, placeholder: "Email", label:false %>
<%= f.input :company, required: true, autofocus: true, placeholder: "Company", label:false %>
<%= f.input :phone_number, autofocus: true, placeholder: "Phone Number", label:false %>
<%= f.input :message, autofocus: true, :input_html => { id: "no-resize" }, placeholder: "Message", label:false %>
</div>
<% end %>
<div class="row">
<div class="col-xs-12">
<div class="form-actions text-center">
<%= f.button :submit, "Submit Enquiry", class: "gen-create-btn" %>
</div>
</div>
</div>
<% end %>
点击提交时我得到的参数是:
"✓", "authenticity_token"=>"xcqR44gPOI7gsN47ddnqKxKuTcaB1Pi5goLa5H81oecbDD7nxE/A1J4KR7rY0Dbyndgz6BrFKzukkTbOCjoGMg==", "enquire"=>{"first_name"=>"daadadad", "last_name"=>"adadada," dadad", "company"=>"adada", "phone_number"=>"dadad", "message"=>"adada"}, "commit"=>"提交查询", "controller"=>"enquires", "action"=>"create"} 允许:false>
编辑:
也许服务显示方法与它有关?
services_controller.rb
def show
@service = Service.find(params[:id])
@user = current_user
end
【问题讨论】:
-
试试
find和params[:id]:@service = Service.find(params[:id]),你会得到什么? -
仍然是相同的错误消息,它以某种方式根本无法通过 id。服务 ID 不在参数中,这就是我如此困惑的原因
-
你的
show方法是什么? -
我没有此型号的查询显示方法。并且该服务的 show 方法也与查询无关,因为只有一个链接应该将我当前正在查看的服务的 id 传递给查询表单
-
最后但并非最不重要的一点是,在路由中有一组
resources。拥有多个资源会导致混乱:)
标签: ruby-on-rails