Ruby on rails 如何创建没有视图的对象

Ruby on rails 如何创建没有视图的对象,ruby-on-rails,Ruby On Rails,我想创建一个播放器对象,没有这个对象模型的视图,也没有其他参数。这是为此对象创建的操作:` def create @player = @tournament.players.new if @player.save redirect_to @tournament render :nothing => true end end 这个对象也不需要额外的参数,因为所有参数都是默认设置的。正如你所看到的,我试图解决我的问题 render:nothing=>true但这

我想创建一个播放器对象,没有这个对象模型的视图,也没有其他参数。这是为此对象创建的操作:`

def create
  @player = @tournament.players.new

  if @player.save
    redirect_to @tournament
    render :nothing => true
  end
end
这个对象也不需要额外的参数,因为所有参数都是默认设置的。正如你所看到的,我试图解决我的问题 render:nothing=>true但这不起作用,这是资源:

缺少模板播放器/新,应用程序/新,带有{:locale=>[:en],:formats=>[:html],:variants=>[],:handlers=>[:erb,:builder,:raw,:ruby,:coffee,:haml,:jbuilder]}

更新:

Routes.rb

resources :users
  resources :tournaments do
    resources :players
    resources :rounds do
      resources :duels
    end
  end
end
服务器日志:

2015年11月11日17:37:00+0100开始127.0.0.1版的GET/Tournames/1/players/new ActiveRecord::SchemaMigration加载0.2ms从schema_迁移中选择schema_迁移。* PlayerControllerNew以HTML格式处理 参数:{锦标赛_id=>1} 锦标赛加载0.5ms选择锦标赛。*从锦标赛中选择tournaments.id=?限制1[[id,1]] 在86ms ActiveRecord中完成了500个内部服务器错误:1.3ms

ActionView::MissingTemplate缺少模板播放器/新建,应用程序/新建,带有{:locale=>[:en],:formats=>[:html,:xml],:variants=>[],:handlers=>[:erb,:builder,:raw,:ruby,:coffee,:haml,:jbuilder]}。搜索: */home/adam/workspace/tc/app/views */home/adam/.rvm/gems/ruby-2.2.2/gems/designe-3.4.1/app/views :

2015年11月11日17:37:01+0100开始127.0.0.1版的GET/Tournames/1/players/new PlayerControllerNew以HTML格式处理 参数:{锦标赛_id=>1} 锦标赛加载0.1ms选择锦标赛。*从tournaments.id=?限制1[[id,1]] 在5ms ActiveRecord中完成500个内部服务器错误:0.1ms

ActionView::MissingTemplate缺少模板播放器/新建,应用程序/新建,带有{:locale=>[:en],:formats=>[:html],:variants=>[],:handlers=>[:erb,:builder,:raw,:ruby,:coffee,:haml,:jbuilder]}。搜索: */home/adam/workspace/tc/app/views */home/adam/.rvm/gems/ruby-2.2.2/gems/designe-3.4.1/app/views :

玩家创建按钮,在动作比赛中呈现。索引:问题可能从这里开始

%td= link_to 'Join', new_tournament_player_path(tournament), class: "btn btn-primary btn-md"

如何解决此问题?

从服务器日志中可以看到,此处甚至没有调用创建操作:

Started GET "/tournaments/1/players/new" for 127.0.0.1
...
Processing by PlayersController#new as HTML
在Rails和REST中,通常使用POST请求方法来创建资源。GET请求应该始终是幂等的,而不是在服务器上创建、更改或销毁资源

为什么??因为GET请求存储在浏览器历史记录中。点击“后退”按钮将导致无意中创建、更改或销毁记录!不太好

如果您希望在rails中创建资源而不需要单独的新操作或视图,则可以使用以下表单:

<%= form_for [tournament, Player.new] do |f| %>
  <%= f.submit %>
<% end %>
Rails提供了一个名为的方便方法,它将为您创建一个表单,这样您就有了一个链接或按钮,用于发送HTTP谓词POST、PUT/PATCH、DELETE的扩展列表

<%= button_to "Join", tournament_players_path(tournament), method: :post %>

它正在创建操作中寻找新的视图文件?是的,这里有些不对劲-Rails按照惯例会查找/players/create.html.erb,除非您的控制器重定向或显式渲染,如render:nothing=>true。如果您的创建操作被调用,请检查服务器日志。如果您包含执行的确切步骤和路线,可能会有所帮助。rb@japed我更新了我的问题。
<%= button_to "Join", tournament_players_path(tournament), method: :post %>