0

私はRailsを学んでいます。多くの規則は非常に理にかなっています。コントローラのアクションにマップするコードの規則は奇妙です。

//code                  url               controller action
tweets_path             /tweets/          def index
tweet                   /tweet/ID         def show
new_tweet_path          /tweets/new       def new
edit_tweet_path(tweet)  /tweets/ID/edit   def edit

自動生成されたメソッドヘルパーが、コントローラーのアクションと同じ対称的な方法で実行されないのはなぜですか?例えば:

//code
tweet_index
tweet_show(tweet)
tweet_new
tweet_edit(tweet)

私はとても新しいので、完全に正当な理由があると確信しています、私はまだそれを知りません:)

4

3 に答える 3

1

ヘルパーメソッドは、文の一部のようにすることで読みやすくする方法で生成されます。「新しいツイートへのリンクを作成する」と言う方が、「新しいツイートへのリンクを作成する」よりも適切に聞こえます。カスタムアクションに名前を付けるときも、このことを覚えておくと役立ちます。文に合った名前を使用すると、話し方を学ぶ方法であるため、理解しやすく、覚えやすくなります。

于 2013-02-18T20:01:00.457 に答える
1

ここには 2 つの非対称性があります。

1 つ目は、複数形と単数形のルート ヘルパーです。tweets_*一部のヘルパーはヘルパーであり、他のヘルパーはヘルパーであるのはなぜtweet_*ですか?

その答えは、一部のリソース ルートはメンバールートであり、その他はコレクションルートであるということです。メンバー ルートはリソースのインスタンスを処理する必要があり、コレクション ルートはリソースのすべてのインスタンスをグループとして処理する必要があります (ただし、リソースが単数形でコレクション ルートがない場合は除きます)。index アクションはコレクションルートであり、show アクションはメンバールートです。

次のように、独自のメンバーとコレクション ルートを宣言できます。

# routes.rb
resources :tweets do
  member do
    get :duplicate
  end
  collection do
    get :summarize
  end
end

これにより、標準のヘルパーに加えて 2 つのヘルパーが作成されます。Rails は適切に単数形または複数形のルート ヘルパーを作成することに注意してください。

  1. summarize_tweets_pathパラメータを取らないヘルパー
  2. するduplicate_tweet_pathヘルパー

公式ドキュメントはこちらです。

2 番目の非対称性は、多くの組み込みリソース アクションのヘルパーからアクションが除外されていることです。これは簡潔にするためだったと思いますが、実際にはわかりません。

編集

よく考えたらRailsやRESTでパスのオーバーロードがあるのでアクション名を落としました。'/tweet/:id' パスは、HTTP 動詞に応じて、表示、更新、または削除アクションになる可能性があります。基本的に、パスは何を操作しているかを示しますが、実行するアクションは示しません。

于 2013-02-18T19:41:31.890 に答える
0

対称的でない理由の1つは、マッピングがHTTPアクションに依存していることです。たとえば、GET to / tweetsはインデックスアクションにマップされますが、POST to/tweetsは作成アクションにマップされます。

于 2013-02-18T18:49:45.143 に答える