渲染不适用于控制器中的第二种方法
Render not working on second method in controller
我正在实现一个 phone 和 sim 检查器,它由用户首先输入一个 phone 号码组成。如果输入的 phone 号码在数据库中,则此表单消失,出现第二个表单以检查用户 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]}.
当我尝试在 sim_number 之后再次渲染相同的 template/s 时出现此错误,当 运行 simchecker 方法时。
代码如下:
app/controllers/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
app/views/phones/phone-found.js.erb
$('#phone-number-found').append("<%= j render(partial: 'sim') %>")
$('#phone-number-not-found').html('');
$('#phone-number-error').html('');
$('#phone_phone_number').hide();
app/views/phones/phone-not-found.js.erb
$('#phone-number-found').html('');
$('#phone-number-not-found').html('Working!');
$('#phone-number-error').html('');
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 %>
app/views/phones/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 %>
config/routes.rb
post "/checkphone" => "phones#checkphone"
post "/checksim" => "phones#checksim"
resources :phones, path: '4g-promo'
如果有人能解决我的问题,我将不胜感激。谢谢!
在错误中,您可以看到它正在寻找 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
我正在实现一个 phone 和 sim 检查器,它由用户首先输入一个 phone 号码组成。如果输入的 phone 号码在数据库中,则此表单消失,出现第二个表单以检查用户 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]}.
当我尝试在 sim_number 之后再次渲染相同的 template/s 时出现此错误,当 运行 simchecker 方法时。
代码如下:
app/controllers/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
app/views/phones/phone-found.js.erb
$('#phone-number-found').append("<%= j render(partial: 'sim') %>")
$('#phone-number-not-found').html('');
$('#phone-number-error').html('');
$('#phone_phone_number').hide();
app/views/phones/phone-not-found.js.erb
$('#phone-number-found').html('');
$('#phone-number-not-found').html('Working!');
$('#phone-number-error').html('');
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 %>
app/views/phones/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 %>
config/routes.rb
post "/checkphone" => "phones#checkphone"
post "/checksim" => "phones#checksim"
resources :phones, path: '4g-promo'
如果有人能解决我的问题,我将不胜感激。谢谢!
在错误中,您可以看到它正在寻找 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