Ruby on Rails私有方法?

时间:2013-05-12 17:43:13

标签: ruby-on-rails ruby-on-rails-3 methods private-methods

如果我正在编写私有方法,那么rails会认为单词private下的每个方法都是私有的吗?或者它应该只对第一种方法是私有的?

  private

    def signed_in_user
      redirect_to signin_url, notice: "Please sign in." unless signed_in?
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_path) unless current_user?(@user)
    end 

这是否意味着signed_in_usercorrect_user是私有的?或只是signed_in_user?这是否意味着每当我需要编写私有方法时,它应该在我的文件末尾?

5 个答案:

答案 0 :(得分:10)

是的,private关键字后面的每个方法都是私有的。如果您想更改回定义非私有方法,可以使用其他关键字,例如publicprotected

请参阅Where to place private methods in Ruby?

答案 1 :(得分:3)

private下的所有方法都是私有的。通常,您确实会在文件底部找到这些方法。

但你可以"停止"通过编写另一个关键字protected,然后保护以下所有方法。

答案 2 :(得分:3)

或者您甚至可以通过这种方式定义访问控制,将您的方法列为访问控制功能的参数(public,protected,private):

class SomeClass
    def method1
        ...
    end

    def method2
        ...
    end

    def method3
        ...
    end
    # ... more methods def

    public    :method1, method4
    protected :method3
    private   :method2
end

答案 3 :(得分:2)

正如其他人所写的那样,立即跟随私有关键字的每个方法都是私有的。这是简单的Ruby语法,与rails无关。

private
  .....
def pvt_meth_1
  .....
end

def pvt_meth_2
  .....
end

public

def pub_meth_1
  ......
end

答案 4 :(得分:-1)

它的工作方式与c ++私有,公共标签相同,因此,它们都是私有的