我正在读铁路教程,但不能遵循这一点。
用户模型类中的方法follow!
在关系控制器类中调用create
方法。
create
方法以其他方式调用follow!
方法。
为什么这不会导致无限循环?
模型/ user.rb
class User < ActiveRecord::Base
def follow!(other_user)
relationships.create!(followed_id: other_user.id)
end
end
控制器/ relationships_controller.rb
class RelationshipsController < ApplicationController
before_action :signed_in_user
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
redirect_to @user
end
end
以下是教程的链接:http://ruby.railstutorial.org/chapters/following-users?version=2.3#code:following_p_follow_bang
答案 0 :(得分:2)
您的示例中没有循环。
User
类(models/user.rb
)与Relationship
模型类(models/relationship.rb
)具有一对多(或多对多)关系。我们在MVC的Model侧,完全独立于Controller端。
ActiveRecord用户类relationships
中的models/user.rb
与RelationshipController
类(controllers/relationships_controller.rb
)绝对无关:用户中的relationships.create!
class调用其嵌套关系模型(models/relationship.rb
)的“create”方法。 create
(RelationshipController
)中的controllers/relationships_controller.rb
方法只是CRUD / REST架构模式的几种方法之一。
答案 1 :(得分:0)
relationships.create!
。您看到的create
方法在关系控制器中定义。
class RelationshipsController < ApplicationController
...
end
是控制器代码。它属于RelationshipsController
类。当您致电User#relationships
时,您引用的对象是型号。它属于ActiveRecord::Relation
类,与控制器中定义的create
方法无关。