Javascript 渲染在控制器中的第二个方法上不工作

Javascript 渲染在控制器中的第二个方法上不工作,javascript,html,ruby-on-rails,ajax,erb,Javascript,Html,Ruby On Rails,Ajax,Erb,我正在实现一个电话和sim卡检查器,由用户首先输入电话号码组成。如果输入的电话号码在数据库中,此表单将消失,并显示第二个表单以检查用户sim卡号码是否在数据库中。 我目前遇到的问题是第一个方法(def phonechecker)将phone-found.js.erb、phone-not-found.js.erb和error.js.erb渲染为罚款。但我得到一个模板错误: Missing template phones/phone-not-found, application/phone-not-

我正在实现一个电话和sim卡检查器,由用户首先输入电话号码组成。如果输入的电话号码在数据库中,此表单将消失,并显示第二个表单以检查用户sim卡号码是否在数据库中。 我目前遇到的问题是第一个方法(def phonechecker)将phone-found.js.erb、phone-not-found.js.erb和error.js.erb渲染为罚款。但我得到一个模板错误:

Missing template phones/phone-not-found, application/phone-not-found with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :axlsx, :haml]}.
在运行simchecker方法时,当我尝试在使用相同模板的sim_编号后再次渲染该模板时,会出现此错误

代码如下:

app/controllers/phones\u controller.rb

class PhonesController < ApplicationController
  protect_from_forgery with: :null_session
  def checkphone
    @phone_number = Phone.where('phone_number = ?', params[:phone][:phone_number])
    if @phone_number.exists?
      render 'phone-found'

    elsif @phone_number.blank?
      render 'phone-not-found'

    else
      render 'errors'
    end
  end

  def checksim
    @sim_number = Phone.where('sim_number = ?', params[:sim][:sim_number])
    if @sim_number.exists?
      render 'phone-found'

    elsif @sim_number.blank?
      render 'phone-not-found'

    else
      render 'errors'
    end
  end

  private

  def phone_params
    params.require(:phone).permit(
      :phone_number
    )
  end

  def sim_params
    params.require(:sim).permit(
      :sim_number
    )
  end
end
app/views/phones/error.js.erb

$('#phone-number-found').html('');
$('#phone-number-not-found').html('');
$('#phone-number-error').html('Working!');
app/views/phones/_sim.html.erb

<%= form_for :sim, :url => url_for(:action => 'checksim', :controller => 'phones'), remote: true, :authenticity_token => false, html: { id: 'sim-number-form'}  do |f| %>
  <div id="phone-number-found"></div>
  <div id="phone-number-not-found"></div>
  <div id="phone-number-error"></div>
  <%= f.text_field :sim_number %>
  <%= submit_tag("Check") %>
<% end %>

如果有人能解决我的问题,我将不胜感激。谢谢

在该错误中,您可以看到它正在查找html
:formats=>[:html]
或以下变体之一:
:erb,:builder,:raw,:ruby,:coffee,:axlsx,:haml
。但是您希望它查找
.js.erb
。您需要在控制器方法中添加respond_to方法,如:

def checksim
  @sim_number = Phone.where('sim_number = ?', params[:sim][:sim_number])

  respond_to do |format|
    if @sim_number.exists?
      format.js {render 'phone-found'}
    elsif @sim_number.blank?
      format.js {render 'phone-not-found'}
    else
      format.js {render 'errors'}
    end
  end
end

找不到模板通常是因为找不到模板:try=>render template:“phones/phone not found”,或者将文件名中的“-”替换为“u”,或者将其作为以“u your_file.erb”开头的部分,只是一个旁白,与您的问题没有直接关系:您应该使用
phone.where(phone_number:x)
而不是
。其中('phone_number=?',x)
。与您的
sim卡号码列相同。如果您想要一个直接相等的
where
条件,只需给ActiveRecord一个哈希即可。您好,谢谢您的回答!不幸的是,这不起作用,我不知道我是否做得对,但这就是我在方法中所做的,并尝试:
ef checksim respond\u do | format | format.js{}end@sim\u number=Phone.where('sim\u number=?',params[:sim number]),如果@sim number.exists?将'phone found'elsif@sim_number.blank渲染为空?render'phone not found'else render'errors'end end
我得到的错误是ActionController::UnkownFormat我更新了示例,以显示您必须如何执行该操作,这里还有指向rails文档部分的链接,显示了示例,谢谢!不幸的是,在respond|u to do | format |时出现了相同的错误:ActionController::UnkownFormat::/?您能否验证表单在提交时是否发出AJAX请求?
<%= form_for :sim, :url => url_for(:action => 'checksim', :controller => 'phones'), remote: true, :authenticity_token => false, html: { id: 'sim-number-form'}  do |f| %>
  <div id="phone-number-found"></div>
  <div id="phone-number-not-found"></div>
  <div id="phone-number-error"></div>
  <%= f.text_field :sim_number %>
  <%= submit_tag("Check") %>
<% end %>
<%= form_for :phone, :url => url_for(:action => 'checkphone', :controller => 'phones'), remote: true, :authenticity_token => false, html: { id: 'phone-number-form'}  do |f| %>
  <div id="phone-number-found"></div>
  <div id="phone-number-not-found"></div>
  <div id="phone-number-error"></div>
  <%= f.text_field :phone_number %>
  <%= submit_tag("Check") %>
<% end %>
post "/checkphone" => "phones#checkphone"
  post "/checksim" => "phones#checksim"

  resources :phones, path: '4g-promo'
def checksim
  @sim_number = Phone.where('sim_number = ?', params[:sim][:sim_number])

  respond_to do |format|
    if @sim_number.exists?
      format.js {render 'phone-found'}
    elsif @sim_number.blank?
      format.js {render 'phone-not-found'}
    else
      format.js {render 'errors'}
    end
  end
end