Rails .create()与controller #create

iwa*_*bed 2 action controller model ruby-on-rails ruby-on-rails-3

这是一个Rails新手问题:

当我呼叫create()模型时,它是否绕过相关的控制器create动作?

例如,这不是我的标签控制器#create action:

user.tags.create(:content => new_tag)
Run Code Online (Sandbox Code Playgroud)

但是,如果我tags#create从表单POST到路由,那么它的工作正常.

我假设调用user.tags.create将调用控制器操作并始终在创建时运行其中的代码,但显然它只在POST到该路由期间.

我在这里错过了什么?

编辑:

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

Pau*_*der 5

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

控制器和模型是断开连接的,但只是逻辑上相关的类.

如果您希望模型的所有用户都可以使用代码,那么请为模型添加方法.然后从您的控制器以及您希望该行为的任何其他位置调用该方法.

  • 您需要将该代码放在模型上,然后从控制器以及您希望拥有该行为的任何其他位置调用它.只应通过rails调用控制器以响应对服务器的请求,或通过单元测试/规范. (2认同)