【问题标题】:Rails respond with JBuilder (AngularJS)Rails 使用 JBuilder (AngularJS) 响应
【发布时间】:2015-02-01 18:44:38
【问题描述】:

我有一个简单的斯诺克联赛应用程序,我在 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

那么,我该怎么办?

【问题讨论】:

    标签: ruby-on-rails json angularjs jbuilder


    【解决方案1】:

    请注意您的错误消息: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

    【讨论】:

    • 更改路线有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2014-08-17
    • 2014-11-15
    • 1970-01-01
    • 2012-10-03
    • 2015-06-11
    • 2014-10-01
    相关资源
    最近更新 更多