当面の質問は、主要なトピックを扱います。
- ネストされたリソース
- ポリモーフィック アソシエーション
- フォーム
写真と記事があり、どちらにもコメントがあると仮定します。これにより、ポリモーフィック アソシエーションが作成されます。
#Photo Model -> photo.rb
class Photo < ActiveRecord::Base
has_many :comments, :as => :commentable
accepts_nested_attributes_for :comments
end
#Article Model -> article.rb
class Article < ActiveRecord::Base
has_many :comments, :as => :commentable
accepts_nested_attributes_for :comments
end
#Comment Model -> comment.rb
class comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
コメントを追加および表示するビューは、写真と記事の間で共有されます。
#Index View
<%= form_for [@comment] do |f| %>
<%= render 'form', :f => f %>
# more code...
<% end %>
また、リソースの写真と記事は、次のように他のリソースにネストされています。
# Routes.rb
namespace :galleries do
resources :photos do
resources :comments
end
end
namespace :blogs do
resources :articles do
resources :comments
end
end
上記のフォームでわかるように、ポリモーフィック リソースがありますが、リクエスト パスに応じて親リソースと祖父母リソースが必要です。ハードコードされている場合 (絶対にやらない)、form_for には次の 2 つのうちの 1 つがあります。
<%= form_for [:galleries, :photos, @commetns] do |f| %>
また
<%= form_for [:blogs, :articles, @commetns] do |f| %>
多くの記事や Stackoverflow の回答に見られるように、CommentsController から親を見つけることができると仮定します。
def find_medical_loggable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
end
どうすれば祖父母を見つけて、これらすべてを form_for ヘルパーに入れることができるでしょうか?
よろしくお願いします!