2012-08-05 40 views
0

我想给用户添加图像的能力,但想允许然后将其中一个图像添加到文章。我很好奇,是否必须为Image和ArticleImage创建两个单独的模型?如果我可以使用相同的Image模型来完成这两项工作,那将是非常好的,但到目前为止,我认为可以这么做的唯一方法就是两个独立的模型,就像这样。用户有很多图像和user.article有很多图像

的routes.rb

resources :users do 
    resources :images 
    resources :articles do 
    resources :articles_images 
    end 
end 

我觉得很肯定它会建议不要做这样的事情,虽然这是很有诱惑力:

resources :users do 
    resources :images 
    resources :articles do 
    resources :images 
    end 
end 

我的假设是,如果我采取第一种方法,articles_images只是一个连接表来存储image_id和article_id,是吗?谢谢!

回答

0

只需一个Image模型即可轻松完成此操作。

users.rb的

class User < ActiveRecord::Base 
    has_many :images 
end 

Article.rb

class Article < ActiveRecord::Base 
    has_and_belongs_to_many :images 
end 

Image.rb

class Image < ActiveRecord::Base 
    belongs_to :user 
    has_and_belongs_to_many :articles 

的routes.rb

resources :users 
resources :images 
resources :articles 

在你的图像控制器,通过您的当前用户添加您的图像 -

def create 
    @image = current_user.images.build(params[:image]) 

在最后一步,有多种方法已创建的图像分配给特定的文章。您可以在图像控制器中创建自定义路线和自定义方法来处理此问题。

+0

我看到你要去那里,但似乎我失去了/用户/ 1 /图像路线与此方法?还输/ users/1/articles路线? – botbot 2012-08-05 18:11:55

+0

您仍然可以按照这种方式制作路线,而不会影响模型。 – 2012-08-05 18:17:00