0

Ruby on Rails を使用して、学生グループの委員会ごとに異なるメッセージ ボードを含むシンプルなソーシャル ネットワーキング サイトを作成しています。各ボードの URL 構造を次のようにしたいと考えてhttps://<base_url>/boards/<committee_name>います。これにより、ユーザーはその委員会のメッセージ ボードに移動します。

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

resources :committees, only: [:index] 
match '/boards/:name', to: 'committees#index(name)'

communitys_controller.rb ファイルの私のインデックス関数は次のようになります。

def index(name)  
   @posts = Committee.where(name: name)  
end

次に@posts、ページの変数を使用してすべての投稿を表示しますが、現在 に移動するhttps://<base_url>/boards/<committee_name>と不明なアクション エラーが表示され、 The action 'index(name)' could not be found for CommitteesController.

誰かが私が間違ったことを教えてくれますか?

これが機能したら、この URL 構造を反映するビューをどのように作成しますか?

4

2 に答える 2

1

次のようにルートを設定します。

resources :committees, only: [:index]
match '/boards/:name', to: 'committees#show'

そしてコントローラーは次のようになります:

def index
   @committees = Committee.all
end

def show
   @committee = Committee.find_by_name!(params[:name])
end

でしようとしていた方法で、コントローラーのアクションに引数を実際に渡すことはできませんindex(name)。代わりに、paramsRails が提供するハッシュを使用します。ルート宣言の:name部分は、Rails にそこに一致するものをすべて に入れるように指示しparams[:name]ます。

また、委員会の一覧表示と単一の委員会の表示には、別のアクションを使用する必要があります。Rails の規則に従うと、これらはそれぞれindexshowアクションになります。

于 2013-04-01T19:53:01.463 に答える
0

ルーティングするときは、引数ではなくメソッド名のみを指定します。

match '/boards/:name', to: 'committees#show'

通常、何かを宣言するか、resourcesまたはmatch両方を宣言します。REST-ful であり続けるには、これをshowメソッドにする必要があります。Index はcollectionメソッドであり、通常はいかなる種類のレコード識別子も取りません。

引数は常にparams構造体を介して入ってきます:

def show
  @posts = Committee.where(name: params[:name])
end

ルート経由で公開されるコントローラー メソッドは引数を取りません。private他の目的で引数を取るメソッドを作成することもできます。

于 2013-04-01T19:52:26.520 に答える