Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 不能';找不到';型号';与';id'=_Ruby On Rails - Fatal编程技术网

Ruby on rails 不能';找不到';型号';与';id'=

Ruby on rails 不能';找不到';型号';与';id'=,ruby-on-rails,Ruby On Rails,我不太明白这为什么不起作用。不知何故,我的服务ID根本无法通过。我想我被身份证弄糊涂了,但这应该行得通,但实际上不行。当我点击submit时,它告诉我:找不到id为的服务= 这是我的密码: 查询(u controller.rb) class EnquiresController < ApplicationController before_action :set_enquire, only: [:create, :new] def new @enquire = Enqui

我不太明白这为什么不起作用。不知何故,我的服务ID根本无法通过。我想我被身份证弄糊涂了,但这应该行得通,但实际上不行。当我点击submit时,它告诉我:找不到id为的服务=

这是我的密码:

查询(u 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
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 %>

您在操作:set\u inquire之前有
,只有:[:create,:new]
,它将在
new
create
方法上被调用

def set_enquire
  @service = Service.find(params[:service_id])
end
当您查看
create
方法中的
params
时,没有
service\u id
,因此
params[service\u id]
nil
。所以它失败了,因为
找不到id为的服务=

解决方案:

删除
create
方法的
before_操作

before_action :set_enquire, only: [:new]
由于
@service
可用在
新建
方法中,将
服务id作为
隐藏字段
从表单中发送

<%= f.hidden_filed :service_id, @service %>

除了
资源:查询
,我可以看到您还有嵌套资源,用于
服务
查询
,因此您可以使用如下表单中的资源

<%= simple_form_for [@service, @enquire] do |f| %>



因此,
params
被正确传递。

我认为您的问题来自路由中查询资源的两个路由。rb如果您的对象来自第二个资源:查询,它将生成一个错误,因为它找不到作为服务的“父”路由

resources :services do
  resources :enquires, only: [ :new, :create ]
end

resources :enquires, only: [ :new, :create, :index, :show, :destroy ]

尝试使用
params[:id]
@service=service.find(params[:id])
来查找
find,您会得到什么?仍然是相同的错误消息,不知何故根本无法通过id。服务id不在参数中,这就是为什么我如此困惑您的
show
方法是什么?我没有此型号的查询显示方法。服务的显示方法与查询无关,因为只有一个链接应该将我当前查看的服务id传递到查询表单,最后但并非最不重要的是,在路由中有一组
资源。有多个相同的资源将导致混淆:)因此我尝试将其放入服务show.html.erb以及_表单文件中,但不知何故,此错误消息不会改变。它表示@service=service.find(params[:service_id])有问题。我做了您所写的,使用两种方法,但它根本无法加载表单。总是说找不到id。所以问题只是before_操作方法中的@service=service.find(params[:service_id])行。也许要添加,现在我的url显示:。那个圆点怎么了?@WenqingKevinMa你也应该把这个
改成
好的,我从中删除了,因为它给我一个错误,在重新加载表单页面时说太多参数。现在我的网址改为,我可以看到的形式,这是好的。但当我点击submit时,它给出了nil:NilClass的未定义方法“[]”,行:@service=service.find(params[:enquiry][:service\u id])@WenqingKevinMa不要在表单中删除它。试着用这个
代替它,所以我把它改成了resources:services do resources:inquires,only:[:new,:create]end resources:inquires,only:[:index,:show,:destroy],这很有意义。如果我使用pavan给我的答案,我会得到错误:没有路线匹配[POST]“/查询”
before_action :set_enquire, only: [:new]
<%= f.hidden_filed :service_id, @service %>
@service = Service.find(params[:enquire][:service_id])
<%= simple_form_for [@service, @enquire] do |f| %>
<%= link_to 'Enquire about this Service', new_enquire_path(@service), 
class: "btn btn-primary enquire-btn text-middle" %>
<%= link_to 'Enquire about this Service', new_service_enquire_path(@service), 
class: "btn btn-primary enquire-btn text-middle" %>
resources :services do
  resources :enquires, only: [ :new, :create ]
end

resources :enquires, only: [ :new, :create, :index, :show, :destroy ]