ruby-on-rails - Rails .create() 与 controller#create

标签 ruby-on-rails ruby-on-rails-3 model controller action

这是一个 Rails 新手问题:

当我在模型上调用 create() 时,它会绕过关联的 Controller create 操作吗?

例如,这没有命中我的标签 Controller #create action:

user.tags.create(:content => new_tag)

但是如果我从一个表单 POST 到 tags#create 路由,那么它工作得很好。

我假设调用 user.tags.create 会调用 Controller 操作并始终在创建时运行其中的代码,但显然它仅在对该路由的 POST 期间。

我在这里错过了什么?

编辑:

有没有办法进行调用以确保运行 Controller 创建代码?我有一些代码可以通过永久链接查找标签并在必要时创建一个新标签,否则重新使用现有标签。使用 model.create() 不会运行任何代码。不过我可能“做错了”:P

最佳答案

模型对 Controller 一无所知,它只是一个表示存储在数据库中的状态的对象,可能还有一些额外的封装行为。 Controller 是一个响应对服务器发出的请求的对象。虽然默认脚手架会修改您的模型,但 Controller 甚至不必使用模型。

Controller 和模型是断开的,但只有逻辑上相关的类。

如果您有希望模型的所有用户都可以使用的代码,请向您的模型添加一个方法。然后从您的 Controller 以及您希望该行为的任何其他地方调用该方法。

关于ruby-on-rails - Rails .create() 与 controller#create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5793599/

相关文章:

ruby-on-rails - 具有高级关系的 Rails 5 RESTful API

ruby-on-rails - Rails 多种帖子类型 : nested forms and complex association

ruby-on-rails - Nginx 和 passenger root 指令不适用于 Capistrano 3。当前版本的符号链接(symbolic link)中断应用程序

model - 如何在模型中请求文件,YII2

ruby-on-rails - rake 任务在哪里定义?

ruby-on-rails - Rails 4 JSON::ParserError (757: 'null' 处的意外标记):

ruby-on-rails-3 - RSpec 2 : NoMethodError on 'route_to' with rspec-rails?

ruby-on-rails - Heroku 不在编译中使用 gem

django - 我需要什么样的模型和字段来处理诸如Apple的Autorenewable订阅之类的订阅?

ruby-on-rails - 在 Rails 中通过 has_many 连接表