Rails在关系模型上创建资源的最佳实践

时间:2015-01-02 11:41:43

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

我想知道创建/销毁关系资源的最佳方法是什么。例如:我有两个名为PictureFavorite的模型。用户可以将图片添加到他的收藏夹中。

class Picture 

end


class Favorite

 belongs_to :picture
 belongs_to :user

end

我想知道哪个是添加登录的最佳位置(练习),以便将图片添加到他/她的收藏夹中。是否最好在PicturesController中添加favorite操作,根据其存在情况createdelete收藏,或者创建一个名为{{的单独控制器1}}并添加两个名为FavoritesControllercreate的动作?

1 个答案:

答案 0 :(得分:1)

遵循 Rails约定和RESTful原则的最佳方法是创建每个资源的控制器,其中包含操作该资源所需的操作。根据您的情况,您有一个可以创建和销毁的收藏资源,因此路径映射应该是这样的:

  Prefix Verb   URI      Pattern                  Controller#Action
  favorites     POST     /favorites(.:format)     favorites#create
  favorite      DELETE   /favorites/:id(.:format) favorites#destroy

你的控制器应该是这样的:

class FavoritesController < ApplicationController
  def create
    # Create a favorite here based on its params !
  end

  def destroy
    # Destroy a favorite here based on its id !
  end
end

关于登录过程,我认为它应该是您UsersController的关注点,尽管有些Ruby开发人员更喜欢使用SessionsController,因为它是Devise默认值。

请注意,您可以选择创建嵌套资源路由,这在将has_one / belongs_to关系映射到路由时是一个好主意,这确实是最佳做法。您可以查看Rails Guides了解详细信息。

我在这里没有提出这种方法,因为当谈到User资源时,在你的路由上拥有它的id并不是一个好主意,这是一种默认在后端使用它。

我希望它有所帮助:P