2017-02-22 69 views
0

我正在实现一个电话和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]}. 

,当我尝试呈现相同的模板/ S又在已sumbitted他们SIM_NUMBER,运行simchecker方法时会出现此错误。

下面的代码:

应用程序/控制器/ phones_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 

应用程序/视图/手机/电话found.js.erb

$('#phone-number-found').append("<%= j render(partial: 'sim') %>") 
$('#phone-number-not-found').html(''); 
$('#phone-number-error').html(''); 
$('#phone_phone_number').hide(); 

应用程序/视图/手机/phone-not-found.js.erb

$('#phone-number-found').html(''); 
$('#phone-number-not-found').html('Working!'); 
$('#phone-number-error').html(''); 

应用程序/视图/手机/ error.js.erb

$('#phone-number-found').html(''); 
$('#phone-number-not-found').html(''); 
$('#phone-number-error').html('Working!'); 

应用程序/视图/手机/ _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 %> 

应用程序/视图/手机/ index.html.erb

<%= 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 %> 

配置/ routes.rb中

post "/checkphone" => "phones#checkphone" 
    post "/checksim" => "phones#checksim" 

    resources :phones, path: '4g-promo' 

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

+0

模板通常不会发现是因为没有找到模板:尝试=>渲染模板:“手机/电话未找到”,或更换“ - ” '_'作为你的文件名,或者使其成为部分以'_your_file.erb'开始 –

+0

只是一边,不直接关系到你的问题:你应该使用'Phone.where(phone_number:x)'而不是'.where('phone_number =?',x)'。和你的'sim_number'列一样。如果你想要一个平等的'where'条件,只需给ActiveRecord一个散列。 – meagar

回答

0

在错误中,您可以看到它正在寻找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 
+0

嗨,谢谢你的回答!这不工作,不幸的是,不知道如果我做对了,但这是我把我的方法,并尝试: 'ef checksim respond_to do | format | format.js {} end @sim_number = Phone.where('sim_number =?',params [:sim] [:sim_number]) if @ sim_number.exists? render'phone-found' elsif @ sim_number.blank? 渲染“手机未找到” 其他 渲染的“错误” 结束 end' 我得到的错误是ActionController的:: UnkownFormat –

+0

我更新了例子来说明你将如何必须这样做 – swaincreates

+0

另外这里是链接到rails文档部分,显示示例http://guides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns – swaincreates

相关问题