为什么这个轨道教程“跟随”功能有效?

时间:2013-12-26 14:45:54

标签: ruby-on-rails

我正在读铁路教程,但不能遵循这一点。

用户模型类中的方法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

2 个答案:

答案 0 :(得分:2)

您的示例中没有循环。

User类(models/user.rb)与Relationship模型类(models/relationship.rb)具有一对多(或多对多)关系。我们在MVC的Model侧,完全独立于Controller端。

ActiveRecord用户类relationships中的models/user.rbRelationshipController类(controllers/relationships_controller.rb)绝对无关:用户中的relationships.create! class调用其嵌套关系模型(models/relationship.rb)的“create”方法。 createRelationshipController)中的controllers/relationships_controller.rb方法只是CRUD / REST架构模式的几种方法之一。

答案 1 :(得分:0)

在模型上调用

relationships.create!。您看到的create方法在关系控制器中定义。

class RelationshipsController < ApplicationController
   ...
end

控制器代码。它属于RelationshipsController类。当您致电User#relationships时,您引用的对象是型号。它属于ActiveRecord::Relation类,与控制器中定义的create方法无关。