Rails约定为多态模型+控制器

时间:2014-05-29 23:28:55

标签: ruby-on-rails ruby-on-rails-4 polymorphic-associations

我有用户,群组和网页。每条记录都可以有图片。

这是我的架构:

  1. Pictures的多态模型。用户,组和页面为picturable
  2. 每个用户,群组和网页的嵌套pictures控制器(例如users/5/pictures
  3. 这是最标准的设置吗?我忘记了任何Rails惯例吗?

    routes.rb示例如下所示:

    resources :users do
      resources :pictures
    

    pictures_controller.rb看起来像这样:

    class PicturesController < ApplicationController
      before_filter :load_picturable
    
      def show
        @picture = @picturable.pictures.find(:id)
      end
    
      # Get permissible for different objects.
      def load_picturable
        resource, id = request.path.split('/')[1,2] # /photos/1 
        # Couples this controller to format of URL, not ideal.
        @picturable = resource.singularize.classify.constantize.find(id)
      end
    end
    

1 个答案:

答案 0 :(得分:1)

烨。这几乎就是我过去使用多态图像模型的项目所使用的。

在我的最新项目中,我将多态关系标记为可上载,并使用相同的方法获取URL数据。

def load_uploadable
    resource, id = request.path.split('/')[1,2]
    @uploadable = resource.singularize.classify.constantize.find(id)
end

如果有帮助,这是我的节目功能。

def show
@asset = Asset.find(params[:id])
@assets = @uploadable.assets
respond_to do |format|
  format.html
  format.json { render json: @asset}
end