gpt4 book ai didi

ruby-on-rails - 表单中的 Rails 模型继承

转载 作者:行者123 更新时间:2023-12-04 15:04:07 27 4
gpt4 key购买 nike

我正在为我的应用程序做一个报告系统。
例如,我创建了一个模型 ReportKind,但由于我可以报告很多内容,因此我想制作不同的报告类型组。由于他们共享很多行为,我正在尝试使用继承。

所以我有主要模型:

model ReportKind << ActiveRecord::Base
end

并创建例如:
model UserReportKind << ReportKind
end

在我的表 report_kinds 中,我有类型列,直到这里一切正常。
我的问题出在表单/ Controller 中。

当我做 ReportKind.new ,我的表单是使用 '*report_kind*' 前缀构建的。
如果获得 UserReportKind,即使通过 ReportKind.find ,表单将构建 'user_report_kind' 前缀。

这会弄乱 Controller 中的所有内容,因为有时我会有 params[:report_kind],有时我会有 params[:user_report_kind],等等我所做的所有其他继承。

无论如何要强制它使用'report_kind'前缀吗?
另外我不得不在 Controller 中强制使用属性“type”,因为它没有直接从表单中获取值,有没有一种很好的方法来做到这一点?

路由是另一个问题,因为它试图根据继承的模型名称构建路由。我通过在指向同一个 Controller 的路由中添加其他模型来克服这个问题。

最佳答案

这种继承总是很棘手。好在你提到的问题都是可以解决的。

首先,您可以强制表单使用特定的属性名称和 URL,如下所示:

<%= form_for :report_kind, @report_kind, :url => report_kind_path(@report_kind) %>

这将强制@report_kind 的所有参数都在 params[:report_kind] 中,无论 @report_kind 是否为 UserReportKind。此外,所有 post 和 put 请求也将转到 ReportKindsController。

其次,您可以使用这样的隐藏属性指定类型:
<%= form.hidden_field :type, 'UserReportKind' %>

最后,对于路线,我会执行以下操作:
map.resources :user_report_kinds, :controller => :report_kinds

这意味着任何像/user_report_kinds/... 这样的 URL 都会实际使用 ReportKindsController。

关于ruby-on-rails - 表单中的 Rails 模型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047613/

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