9

私はRails3にまったく慣れていません。基本的に足場を作成しました。アプリがアクションにsubscribers応答することだけが必要です。newcreate

だからconfig/routes.rb私は定義しました:

リソース :subscribers, :only => [:new, :create]

このように機能するもの

GET /subscribers =>subscribers#new
POST /subscribers =>subscribers#create

ここで、アプリでサブスクライバーのリソースを/ではなく (ルート) に表示するようにしたい/subscribersので、次のようにしました。

match '/' => "subscribers#new"
match '/' => "subscribers#create"
match '/' => "subscribers#thankyou"
リソース :subscribers, :only => [:new, :create]

これは何とか機能しますが、おそらく最も乾燥したものではありません。私が抱えている問題は次のとおりです。

  1. 作成時に問題が発生した後にフォームに戻ると、ブラウザー/subscribersは単に ではなく URL を表示します/。フォームはform_for(@subscriber)ヘルパー メソッドを使用して作成さpathれるため、ヘルパーはルートの影響を受けないようにする必要があります。
  2. 理想的には、アプリがリクエストに応答することさえ望まない/subscribers
  3. 切断されているときにフォームを投稿すると(から/、接続が戻ったときに更新を行うと(ブラウザは再送信を要求します=> OK)、Railsアプリがクラッシュします(ただし、エラースタックはありません)これは本番環境でした)、それはなぜですか?

また、この方法でルートを設定しようとしました:

resources :subscribers, :only => [:new, :create] do
  収集する
    投稿 '/' => :作成
    get '/' => :new
  終わり
終わり

これはおそらくDRYerですが、これらの問題は修正されません.

これは非常に簡単なことだと思います。助けてください!

4

3 に答える 3

19

あなたの答えをありがとう、それは私が私の質問に対する正確な解決策を見つけるのを助けました:

リソース:subscribers、:only => [:new、:create]、:path =>''、:path_names => {:new =>''}

Rails3でテストおよび作業中:)

于 2010-11-15T12:13:57.647 に答える
3

あなたができる

resources :subscribers, :path => ''

これがルート テンプレートによって提供されていることを確認しGET /ます。たとえば、これを SubscribersController に追加します。

  def index
    render 'welcome/index'
  end

match "/"宣言を使用してリソース インデックス アクションをオーバーライドし、代わりに別のコントローラーにマップする実験を行いましたが、resources宣言は常に手動で宣言されたルートを完全にオーバーライドしているようです。

于 2010-10-25T15:42:11.703 に答える
0

リストの 2 番については、この行を削除し、erb の _path または _url メソッドを書き直してください。

resources :subscribers, :only => [:new, :create]
于 2010-09-28T19:51:01.483 に答える