0

以下是我的控制器代碼和視圖代碼。該視圖顯示一個遊戲列表,我想添加一個遊戲到同一視圖中的現有表。我在後續程序中遇到了一些問題。任何建議或任何人都可以指出我可能做錯了什麼?我如何在rails中進行POST?

class GamesController < ApplicationController 

    # GET /games 
    def index 
    @games = [] 
    client = Games::Client.new 
    @games =client.get_games 
    if @games.blank? 
     render_404 
    end 
    if params[:name] 
     client.create_games params[:name] 
    end 
    end 
end 


%nav.navigation-bar.clearfix{:role => "navigation"} 
    %h3.reader-details Game tools 
    %a.home{:href => root_path, :role => "link", :title => "Home"}Home 
%body 
    %section.form 
    %form.standard{:action => "/games", :method => "post"} 
     %input{type: 'text', name: 'name', class: 'text'} 
     %input.primary-action{type: 'submit', value: 'Add', class: 'button'} 
    .content 
    - if @games.present? 
     %table.games 
     %thead 
      %tr 
      %th type 
      %th id    
     %tbody 
      - @games.each do |game| 
      %tr 
       %td= game['type'] 
       %td= game['id'] 

     %a= link_to "Back", root_path   

回答

0

您沒有定義create操作。爲資源創建RESTful路由時,POST到/games不查找index操作,它查找create操作。

腳手架的資源是一個很好的方式來看看Rails希望你做什麼。

rails g scaffold game name:string

這將創建REST風格的路線,它會在您的控制器,與它們對應的動作。請注意,您可能想要在嘗試使用腳手架之前放棄所擁有的內容,否則腳手架可能無法創建所需的所有內容。如果您想將其粘貼回來,請將您的視圖代碼保存到臨時文件中。

這裏或多或少如何我會去了解它:

# View 
= form_for Game.new do |f| 
    = f.text_field :name 
    = f.submit 'Add' 

# Controller 
    def create 
    if Game.create(params[:game]) 
     redirect_to :action => 'index' 
    else 
     flash[:notice] = "There was a problem creating your new game" 
     render :action => 'index' 
    end 
    end 

# Routes 
    resources :games