私は 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]
123
dummy_go_back_path
これらは最もシンプルなルートですが、外から内へのルーティング信頼できる情報源として Rails ガイドから。