0

私は何をしましたか:

  1. 新しいルビーアプリを作成するrails new campaigns_manager
  2. campaigns_managerディレクトリに移動し、最初のスキャフォールドキャンペーン rails generate scaffold campaign name:stringを生成して移行します
  3. ルートルートを追加root to: 'campaigns#index', as: 'campaigns'

そのようないくつかのコード文字列。次に、サーバーを起動してテストします。見た目も動作も問題ありませんが、新しいキャンペーンを追加しようとしても、何も保存されません。[キャンペーンの作成]ボタンを押すと、コンソールに次のようなメッセージが表示されます。

Started POST "/" for 127.0.0.1 at 2012-04-25 22:30:40 +0300
Processing by CampaignsController#index as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"sKom3YBDEbOcqbSt3gLGWPqBNeqkEw6M59hlwrmH4tM=", "campaign"=>{"name"=>"test"}, "commit"=>"Create Campaign"}
  Campaign Load (0.3ms)  SELECT "campaigns".* FROM "campaigns" 
  Rendered campaigns/index.html.erb within layouts/application (0.9ms)
Completed 200 OK in 37ms (Views: 35.4ms | ActiveRecord: 0.3ms)

次に、キャンペーンリストにリダイレクトしますが、新しいキャンペーンはありません。db\development.sqlite3のテーブルキャンペーンは空です。さらに、キャンペーンコントローラに印刷メソッド を追加して、正しいメソッドを呼び出すかどうかを確認します。そして、「キャンペーンの作成」ボタンを押しても、その作成メソッドは呼び出されません。 私のキャンペーン/新しいビュー:

<h1>New campaign</h1>

<%= form_for(@campaign) do |f| %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

<%= link_to 'Back', campaigns_path %>

キャンペーンをデータベースに保存できないのはなぜですか?

4

2 に答える 2

1

問題はroutes.rbファイルにあります。

root to: 'campaigns#index', as: 'campaigns'

エイリアスas: 'campaigns'はすべてのリクエストを消費しようとします。ルート ディレクティブにエイリアスを追加する必要はありません。デフォルトで既にエイリアスがあります。as: 'root'

ファイルroutes.rbは次のようになります。

resources :campaigns
root to: 'campaigns#index'

Railsガイドのルートの詳細

于 2012-04-25T20:13:30.473 に答える
0

のビュー コードを確認すると役立ちますが、ログからわかるように、 にcampaigns/new投稿されているフォームがアクションによって処理されていることは明らかです (これは、ルートに従っている必要があります)。フォームが投稿されていることを確認する必要があります(Rails RESTful ルーティングではアクションに解決されます)。使用している場合(足場が生成するものだと思います)、次のようになります。/indexcampaigns/new/campaignscreateform_for

<%= form_for @campaign do |f| %> 
于 2012-04-25T20:10:50.143 に答える