Ruby on rails 我应该使用什么操作来创建\u或\u更新操作

Ruby on rails 我应该使用什么操作来创建\u或\u更新操作,ruby-on-rails,rest,crud,Ruby On Rails,Rest,Crud,Rails有基本的REST操作create/update/show/destroy,但如果我想要创建或更新现有记录的操作,我应该为此创建自定义操作吗 我知道rails有first\u或\u initialize,但它似乎不符合create或update的定义 根据我的理解,create应该创建一个新记录,而不是更新现有记录,update应该在不创建新记录的情况下进行更新 这里有一个例子: 我有一个模型Blog,Tag,还有一个连接表Blog\u Tags,它引用Blog\u id,Tag\u i

Rails有基本的REST操作create/update/show/destroy,但如果我想要创建或更新现有记录的操作,我应该为此创建自定义操作吗

我知道rails有
first\u或\u initialize
,但它似乎不符合create或update的定义

根据我的理解,
create
应该创建一个新记录,而不是更新现有记录,
update
应该在不创建新记录的情况下进行更新

这里有一个例子:

我有一个模型
Blog
Tag
,还有一个连接表
Blog\u Tags
,它引用
Blog\u id
Tag\u id
,还有一个
用户id
来记录向这篇博文推荐这个标签的人

[Blog]>-[Blog_Tag]-<[Tag]
             |
         [User]

[Blog]>-[Blog_-Tag]-将其放入创建或更新中没有任何区别。我会选择update,因为该方法将调用update。只需确保清楚地记录了该操作可以创建和更新模型

def update
   user = User.find_or_initialize_by(email: user_params[:email])
   user.update_attributes(user_params)
end

对于谓词,已定义资源的更新操作默认应具有POST/PUT谓词。

您可以使用:find\u或\u initialize或find\u或\u create

For example, in Rails 4 syntax:

  blog = Blog.find_or_initialize_by(name: "abc")
  blog.update(name: "xyz")

Rails 3:

  blog = Blog.find_or_initialize_by_name("abc")
  blog.update_attributes(name: "xyz")
如果记录是新初始化的,更新或更新属性将尝试保存它


您可以阅读此链接

我最终拥有类似blog/[blog\u id]/tag/[tag\u id]/suggest的路径,该路径指向专用控制器
SuggestionController
,我在那里定义了建议操作。

否。请勿尝试添加您自己的方法。不要为了避免多次请求而做一些奇怪的事情。此外,PUT可能是您想要的。它将在给定的URI上创建一个资源,或者更新(替换)该URI上的现有资源。