gpt4 book ai didi

ruby-on-rails-3.1 - Rails 3 STI 负载派生部分

转载 作者:行者123 更新时间:2023-12-04 01:35:46 26 4
gpt4 key购买 nike

好的,所以我想做的是在父类中有一个模板,它在默认模板中加载一个部分。该部分虽然应该特定于派生类。

def class DataItem < ActiveRecord::Base
def value
# do something fancy here
end
end

def class FooDataItem < DataItem
def value
"foo"
end
end

def class BarDataItem < DataItem
def value
"bar"
end
end

然后,我们有以下 View 结构:
  • app/views/data_item/index.html.erb
  • app/views/data_item/_col_info.html.erb
  • app/views/foo_data_item/_col_info.html.erb
  • app/views/bar_data_item/_col_info.html.erb

  • 在 index.html.erb 中,我们有这样的东西:

    <table>
    <thead>
    <tr>
    <th>Key</th>
    <th>Value</th>
    </tr>
    </thead>
    <tbody>
    <% @dataItems.each do |item| %>
    <tr>
    <td><%= render :partial, item + "/col_info", :locals => { :item => item } %>
    <td><%= item.value %>
    </tr>
    <% end %>
    </tbody>
    </table>

    所以,我知道我可以只为 item 对象加载部分,但我是一个不只是为对象的部分,而是一个子部分。

    一种选择是在 views/data_item/_col_info.html.erb 中创建一个只有一个 if/else 块的部分,然后加载一个单独的部分,但我希望有一种更简洁的方法来使用 STI 来做到这一点。

    另请注意,我不能使用 item.type 作为生成路径的方法,因为我在 View 目录结构中有下划线(类型将是 foodataitem,但我需要 foo_data_item)。

    最佳答案

    我意识到您不能单独使用类的名称来生成路径,但您可以执行以下操作:

    item.class.name.underscore

    那会更方便,然后必须添加 template_path每个类的方法。 underscore method来自 ActiveRecord,它会将您的驼峰式类名转换为正确的格式。

    关于ruby-on-rails-3.1 - Rails 3 STI 负载派生部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11017829/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com