Rails 使用 JBuilder 响应 (AngularJS)
Rails respond with JBuilder (AngularJS)
我有一个简单的斯诺克联赛应用程序,我在 LeaguesController 中有一个操作 add_player。我的客户 (AngularJS) 调用此操作,我想使用 JBuilder 以 json 格式响应。这个工作正常:
def add_player
...
render :json => @league.players.to_json(:only => [ :id, :firstname, :lastname, :max_break, :email ])
end
但是当我删除这一行并添加:
respond_to do |format|
format.html
format.json
end
我有这个错误:
ActionView::MissingTemplate (
Missing template leagues/add_player,
application/add_player
with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder, :haml]}.
Searched in:
* "/home/daniel/SitesWWW/snookerLeague/app/views"
):
app/controllers/leagues_controller.rb:67:in `add_player'
我当然有文件 add_player.json.jbuilder:
json.players @league.players do |player|
json.id player.id
json.firstname player.firstname.capitalize if player.firstname
json.lastname player.lastname.capitalize if player.lastname
json.email player.email
json.max_break player.max_break
end
那么,我该怎么办?
请注意您的错误消息 :formats=>[:html]
这向我表明它正在尝试呈现 add_player.html.erb 而不是您的 jbuilder 模板。
要验证这一点,请尝试更改调用代码并将 .json
附加到 url,这将强制格式为 json.
您还可以在路由中指定默认值 json,而不将其包含在 url 中:
resources :leagues, defaults: { format: :json } do
member do
post :add_player
end
end
另请参阅:http://guides.rubyonrails.org/routing.html#defining-defaults
我有一个简单的斯诺克联赛应用程序,我在 LeaguesController 中有一个操作 add_player。我的客户 (AngularJS) 调用此操作,我想使用 JBuilder 以 json 格式响应。这个工作正常:
def add_player
...
render :json => @league.players.to_json(:only => [ :id, :firstname, :lastname, :max_break, :email ])
end
但是当我删除这一行并添加:
respond_to do |format|
format.html
format.json
end
我有这个错误:
ActionView::MissingTemplate (
Missing template leagues/add_player,
application/add_player
with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder, :haml]}.
Searched in:
* "/home/daniel/SitesWWW/snookerLeague/app/views"
):
app/controllers/leagues_controller.rb:67:in `add_player'
我当然有文件 add_player.json.jbuilder:
json.players @league.players do |player|
json.id player.id
json.firstname player.firstname.capitalize if player.firstname
json.lastname player.lastname.capitalize if player.lastname
json.email player.email
json.max_break player.max_break
end
那么,我该怎么办?
请注意您的错误消息 :formats=>[:html]
这向我表明它正在尝试呈现 add_player.html.erb 而不是您的 jbuilder 模板。
要验证这一点,请尝试更改调用代码并将 .json
附加到 url,这将强制格式为 json.
您还可以在路由中指定默认值 json,而不将其包含在 url 中:
resources :leagues, defaults: { format: :json } do
member do
post :add_player
end
end
另请参阅:http://guides.rubyonrails.org/routing.html#defining-defaults