これをベストプラクティスと見なすか忌まわしいと見なすかはまだわかりませんが、同じ問題に取り組んだときに思いついたのは次のとおりです。
私の推論は、このサイトは特定の機能 (この議論ではあまり重要ではありません) + 組織自体に関する一連の情報 (私たちについて、連絡先、FAQ、ホームページの宣伝文句など) を提供していたということです。これらのデータはすべて実際に組織に関連していたので、組織モデルはそれらのそれぞれを属性として合理的に考えました。モデルは次のとおりです。
class Organisation < ActiveRecord::Base
...validations stuff...
def self.attrs_regex
Regexp.new(self.attrs.join("|"))
end
def self.attrs
self.column_names.reject{|name| name =~ /id|created_at|updated_at/}
end
end
次に、attrs クラス メソッドを使用して、列に基づいてルートを生成します。これは私のroutes.rbにあります:
Organisation.attrs.each do |attr|
get "#{attr}" => "organisation##{attr}", :as => attr.to_sym
get "#{attr}/edit" => "organisation#edit", :as => "#{attr}_edit".to_sym, :defaults => { :attribute => attr }
post "#{attr}" => "organisation#update", :as => :organisation_update, :defaults => { :attribute => attr}, :constraints => Organisation.attrs_regex
end
コントローラーは少し奇妙になり、ここのコードにはわくわくしませんが、とにかくここにあります。属性が設定されていて、ビューで使用できることを確認する必要があります。これにより、そこで正しいことを行うことができるので、アプリケーション コントローラーで設定します。
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_attribute
def set_attribute
@attribute = action_name.parameterize
end
end
組織コントローラーの場合、 @organisation 変数を before_filter のデータベースの最初で唯一の行に設定し、メソッドを呼び出して失敗し、同じ名前のビューをレンダリングするという通常の魔法を Rails に実行させます。edit アクションは、1 つのビュー ファイルを使用してすべての異なる属性を編集します。
class OrganisationController < ApplicationController
before_filter :set_organisation
def edit
authorize! :edit, @organisation
@attribute = params[:attribute].parameterize
end
def update
authorize! :update, @organisation
@attribute = params[:attribute]
respond_to do |format|
if @organisation.update_attributes(params[:organisation])
format.html do
redirect_to "/#{@attribute}", notice: t('successful_update')
end
format.json { head :ok }
else
format.html { render action: "edit" }
end
end
end
private
def set_organisation
@organisation = Organisation.first
end
end
それが私が終わったところです。あなたと同じように、私はここで沸き立つ天才の塊を利用するために SO を打ちましたが、残念な結果に終わってしまいました. 他にもっと良いものがあれば、それを見つけたいと思っています。
私が行ったことについて私が気に入っているのは、組織テーブルの構造に基づいてルートが自動的に生成されることです。
私がやったことで気に入らないのは、組織テーブルの構造に基づいてルートが自動的に生成されることです。
i18nルーティングに対処しなければならない場合、その設計決定にお金を払うことはわかっています。おそらく、これが悪い考えである理由は他に何千もありますが、まだ発見していませんが、今のところ、満足のいくクライアントがいます.
結局のところ、これはあなたがこれを行うべきであるという提案ではありませんが、私が得た以上のものをあなたに提供したいと思っています.