0

Ruby on Rails 3.2.2 を使用していますが、コントローラー アクションを別のコントローラー アクションに "マップ" できるかどうかを知りたいのですが、いくつかのパラメーターを変更します。つまり、次のモデルとコントローラーがあります。

# File system:
# /app/models/articles/user_association.rb
# /app/models/users/article_association.rb
# /app/controllers/users/article_associations_controller.rb
# /app/controllers/articles/user_associations_controller.rb


# /app/models/articles/user_association.rb
class Articles::UserAssociation < ActiveRecord::Base
  ...
end

# /app/models/users/article_association.rb
class Users::ArticleAssociation < Articles::UserAssociation # Note inheritance
  #none
end

# /app/controllers/users/article_associations_controller.rb
class Articles::UserAssociationsController < ApplicationController
  def show
    @articles_user_association = Articles::UserAssociation.find(params[:article_id])
    ...
  end

  def edit
    @articles_user_association = Articles::UserAssociation.find(params[:article_id])
    ...
  end

  ...
end

# /app/controllers/articles/user_associations_controller.rb
class Users::ArticleAssociationsController < ApplicationController
  def show
    # It is the same as the Articles::UserAssociationsController#show 
    # controller action; the only thing that changes compared to 
    # Articles::UserAssociationsController#show is the usage of 
    # 'params[:user_id]' instead of 'params[:article_id]'.
    @users_article_association = Users::ArticleAssociation.find(params[:user_id])
    ...
  end

  def edit
    # It is the same as the Articles::UserAssociationsController#edit
    # controller action; the only thing that changes compared to  
    # Articles::UserAssociationsController#edit is the usage of
    # 'params[:article_id]' instead of 'params[:user_id]'. 
    @users_article_association = Users::ArticleAssociation.find(params[:user_id])
    ...
  end

  ...
end

/users/:user_id/articleそこで、パスに関連するコントローラーのアクションとして、パスに向けられた HTTP リクエストを処理したいと思い/articles/:article_id/userます。

: DRY (Don't Repeat Yourself) コードにするためにそれを作成したいと思いますが、前に述べたように、 と の間で変わるUsers::ArticleAssociationsControllerArticles::UserAssociationsController#showparams.

出来ますか?

4

1 に答える 1

0

パラメータを変更するだけでなく、検索するクラスを変更します。

@users_article_association = Users::ArticleAssociation.find(params[:user_id])
# and
@users_article_association = Articles::UserAssociation.find(params[:article_id])

それらはかなり異なります。これらの違いを処理してから、実際の共通コードを別のメソッドに抽出し、それを両側から呼び出すことをお勧めします。

于 2012-07-13T13:25:05.457 に答える