0

「問題」と呼ばれるリソースの通常の CRUD アクションを備えたコントローラーがあります。Issue テーブルには、各インスタンスの状態を保存するための published というブール値があります。問題が公開されたブール値を true に設定した場合、問題の他のすべてのインスタンスを false に設定する必要があります。

私の質問は、issues_controller.rb に関するものです。現在、発行されたブール値が attr_accessible としてリストされていません。私の考えでは、ビューに特定のアクションにルーティングされるボタンがあると思いました。

def publish
  // before_filter to set all the issues' publish column to false
  // update_attribute to set publish column to true
end

def surpress
  // update_attribute to set this issues publish column to false
end

いくつかの調査を行い、私のアプローチを再考した後、おそらく何らかの新しいコントローラーを作成する方が良いと思いました-よりリソースの多いルートを使用する published_issues_controller.rb:

def create
  // same as the publish method above
end

def destroy
  // same as surpress method above
end

これは私の最初の Rails アプリです。これらのアプローチのいずれか (またはまったく異なるもの) が最適かどうかについての洞察をいただければ幸いです。

4

2 に答える 2

1

問題が公開されたブール値を true に設定した場合、問題の他のすべてのインスタンスを false に設定する必要があります。

それは私にとって奇妙なビジネス要件のように思えますか?

とにかく、あなたが文書化したコントローラーアクションを使用しますが、beforeフィルターは使用しません

# routes
resources :issues do
  member do
    post 'publish' # might want put instead of post?
    post 'surpress' 
  end
end

コントローラ

def publish
  issue = Issue.find(params[:id])
  Issue.transaction do
    issue.publish!
  end
  # ... redirect, etc...
end

モデル

def publish!
  published = true
  # set 'All' other issues [published = false]
  # maybe it is only ones that are somehow related to this one? same project?
  save!
end
于 2012-12-28T03:32:20.947 に答える
0

はい、CRUDにRESTを含めてください(実際にはかなり似ています)。

RESTを使用するとresources :issuesconfig/routes.rb

次に、いくつかの標準アクション。

レールガイドでは、CRUDの下にそれらをリストしています。

http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

ですから、はい、作成して破棄する方が優れています。

それらを実装するだけの場合、ベストプラクティスは、それらへのルートを使用:only =>または制限することです。:except =>

于 2012-12-28T03:05:36.307 に答える