2015-11-11 4 views
2

Я хочу создать объект игрока без представлений для этой объектной модели и без дополнительных параметров. Это действие создайте для этого объекта: `Как создать объект без представления

def create 
    @player = @tournament.players.new 

    if @player.save 
    redirect_to @tournament 
    render :nothing => true 
    end 
end 

Этот объект также не нуждается в дополнительных параметрах, поскольку все параметры, заданные по умолчанию. Как вы можете видеть, я пытался решить мою проблему с «визуализации: ничего => правда», но это не работают, и это resoult:

Отсутствует шаблон игроков/новое, приложение/новый с {: locale => [: en],: formats => [: html],: variantants => [],: 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 

журналы сервера:

Started GET "/ турниры/1/игроков/новый" для 127.0.0.1 в 2015- 11-11 17:37:00 +0100 ActiveRecord :: SchemaMigration Load (0.2ms) SELECT «schema_migrations». * FROM «schema_migrations» Обработка на PlayersControll er # new как HTML Параметры: {"tournament_id" => "1"} Турнирная нагрузка (0,5 мс) SELECT «турниры». * ОТ «турниры» ГДЕ «турниры». «id» =? LIMIT 1 [["id", 1]] Завершено 500 Внутренняя ошибка сервера в 86 мс (ActiveRecord: 1,3 мс)

ActionView :: MissingTemplate (Отсутствующие шаблонные игроки/новые, приложения/новые с {: locale => [ : en],: formats => [: html,: xml],: variantants => [],: handlers => [: erb,: builder,: raw,: ruby,: coffee,: haml,: jbuilder]} Поиск: * "/ home/adam/workspace/tc/app/views" * "/home/adam/.rvm/gems/ruby-2.2.2/gems/devise-3.4.1/app/views " ):

Started GET "/ турниры/1/игроков/новый" для 127.0.0.1 в 2015-11-11 17:37:01 +0100 Обработка по PlayersController # новый, как HTML Параметры: {" tourname nt_id "=>" 1 "} Турнирная нагрузка (0,1 мс) ВЫБЕРИТЕ« турниры ». * ОТ« турниры »ГДЕ« турниры ».« id »=? LIMIT 1 [["id", 1]] Завершено 500 Внутренняя ошибка сервера в 5 мс (ActiveRecord: 0,1 мс)

ActionView :: MissingTemplate (Отсутствующие шаблонные игроки/новые, приложения/новые с {: locale => [ : ru],: formats => [: html],: variantants => [],: handlers => [: erb,: builder,: raw,: ruby,: coffee,: haml,: jbuilder]}. : * "/ home/adam/workspace/tc/app/views" * "/home/adam/.rvm/gems/ruby-2.2.2/gems/devise-3.4.1/app/views" ) :

кнопку, вынесенное в действии игрока создать турниры # индекс: (вероятно, проблема начинается здесь)

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

Как решить эту проблему?

+0

Он ищет новый файл в действии для создания? –

+0

Да, здесь что-то не получается - Rails по соглашению будет искать '/ players/create.html.erb', если ваш контроллер не перенаправляет или не отображает явно (например,« render: nothing => true »). Проверьте журналы сервера, если ваше действие на создание даже вызывается. Это может помочь, если вы включите точные шаги, которые вы выполнили, и ваши маршруты. Rb – max

+2

@japed Я обновил свой вопрос. – Nekron

ответ

3

Как вы можете видеть на сервере зарегистрирует ваше создать действие даже не называют здесь:

Started GET "/tournaments/1/players/new" for 127.0.0.1 
... 
Processing by PlayersController#new as HTML 

CRUD in Rails

http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

В Rails и REST в целом метод POST запрос используется для создания ресурсов. Запрос GET всегда должен быть идемпотентным, а не создавать, изменять или уничтожать ресурсы на сервере.

Почему? Becuase GET запросы хранятся в истории браузера. Нажатие кнопки «Назад» приведет к тому, что запись будет непреднамеренно изменена или уничтожена! Нехорошо.

Если вы хотите создать ресурс в рельсах, не имея отдельного new действия или просмотреть вы бы использовать форму:

<%= form_for [tournament, Player.new] do |f| %> 
    <%= f.submit %> 
<% end %> 

Отправка формы будет выдавать запрос:

POST /tournaments/:tournament_id/players 

Rails предлагает удобный метод, который называется button_to, который создаст для вас форму, чтобы у вас была ссылка или кнопка, которая отправляет расширенный список HTTP-глаголов (POST, PUT/PATCH, DELETE).

<%= button_to "Join", tournament_players_path(tournament), method: :post %> 
Смежные вопросы