2017-02-22 49 views
0

Я реализую телефон и SIM-контролер, который состоит из пользователя, который сначала вводит номер телефона. Если введенный номер телефона находится в базе данных, эта форма исчезает, и появляется вторая форма, чтобы проверить, находится ли номер sim пользователей в базе данных. Проблема, с которой я в настоящее время сталкиваюсь, - это первый метод (def phonechecker), который отображает phone-found.js.erb, phone-not-found.js.erb и error.js.erb в порядке. Но я получаю ошибку шаблона:Render не работает над вторым методом в контроллере

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

шаблон не найден, как правило, происходит потому, что шаблон не найден: попробуйте => Render шаблон: «телефон/телефон-не-найден», или замените «-» с '_' в имени вашего файла или сделать его частичным, начиная с: '_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 reply_to do | format | format.js {} end @sim_number = Phone.where ('sim_number =?', Params [: sim] [: sim_number]) if @ sim_number.exists? отрисовать '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