Rails 单表继承需要在 view 下建立新的模板路径吗

bill_yang1016 · 2015年06月25日 · 最后由 rei 回复于 2015年06月26日 · 1535 次阅读

类似这种,man 单例继承自 users . ├── controllers │   ├── user_controller.rb │  ├── models │   ├── user.rb │   └── man.rb ├── views │   ├── users │   └── index.html.haml

@user = user.new 的时候,在 index.html.haml 中使用这种方式渲染

render @user

时,使用的模板是 views/users/_user.html.haml 如果是@user = man.new 的时候,同样的方式

render @user

这个时候找的模板是 views/men/_man.html.haml 模板吗?为什么不是找 _user.html.haml? 这种方式的渲染是根据对象的类型去找模板的吗?

还有在父类中看到下面一段代码,但是没看懂这个到底是什么意思

def self.inherited(child)
  child.instance_eval do
    def model_name
      user.model_name
    end
  end
  super
end

Ruby 新手,高手帮忙解答下疑问。

举个例子 @hello = Man.new. render @hello你觉得是去找_hello.html.haml 吗?

是根据对象的类型去找模板。

#1 楼 @pathbox 额,麻烦好好看下我问题的描述; 你理解成根据变量的命名找模板了。。。

#2 楼 @rei 那就是单表继承的时候,对子类对象的渲染还是会去找子类类型对应路径下的模板? 那就是必须新增 views/子类类型/xxx.html.haml 了,我以为只需要在父类的路径下增加对应子类类型名的 xxx.html.haml 就可以了。

def self.inherited(child)
  child.instance_eval do
    def model_name
      user.model_name
    end
  end
  super
end

这个方法没完全看明白,只知道是在子类继承 user 时,会触发执行 inherited 方法,但是这个方法里重写的 model_name 以及最后的 super 到底是什么含义没搞明白。

#3 楼 @bill_yang1016 额。我这是反问句。。。我知道那是错的

<%= render partial: "users/user", object: @user %>
需要 登录 后方可回复, 如果你还没有账号请 注册新账号