既存のコントローラーに新しいアクションを追加するにはどうすればいいですか? 質問する

既存のコントローラーに新しいアクションを追加するにはどうすればいいですか? 質問する

私は Rails の初心者です。初心者のような質問で申し訳ありません。

新しいコントローラーを作成しました:rails new controller Say hello goodbye

この既存のコントローラーに「hello」や「goodbye」のような新しいアクションを追加するにはどうすればよいですか?

ベストアンサー1

新しいアクションを追加するのは簡単です。コントローラーにメソッドを追加するだけです。たとえば、次のようになります。

# app/controllers/dummy_controller.rb
def get_back
  logger.warn "It works!"
  redirect_to :back
end

さて、URL経由でこのアクションにアクセスできるようにするには、そのためのルートが必要です。これはconfig/routes.rbファイル内で行います。次のようにハードルートとして追加できます。

get '/go_back', to: "dummy#get_back"

これは最も単純なルートです。しかし、RESTful ルートのように動作させたい場合もあります。これは、1 つ以上のモデルに対してアクションを実行する場合に便利です。ルート ファイルには、次の内容が含まれます。

resources :dummy do
  collection do
    get 'get_back'
  end
end

これにより、コレクションに対してメソッドを受け入れることができますget。ヘルパー がありdummy_go_back_url、このページにアクセスするための URL は です/dummies/go_back

これは、リソースのコレクションに対して操作を行うためのものです。特定のオブジェクトに対して操作を行う場合は、アクションを指定する必要がありますmember

resources :dummy do
  member do
    get 'get_back'
  end
end

メンバー アクションは 1 つのオブジェクトのみを対象としているため、 のような URL になります。これにより、コントローラ内の/dummies/123/go_back変数が に自動的に設定され、オブジェクトを簡単に取得できるようになります。また、ヘルパー メソッドが定義され、1 つのオブジェクトまたは ID をパラメーターとして受け取り、正しい URL を生成します。params[:id]123dummy_go_back_path

これらは最もシンプルなルートですが、外から内へのルーティング信頼できる情報源として Rails ガイドから。

おすすめ記事