【问题标题】:How can i use multiple controller with one model?如何在一个模型中使用多个控制器?
【发布时间】:2012-08-09 09:50:42
【问题描述】:

我有一个名为“Post”的模型,具有以下属性:

class Post < ActiveRecord::Base
  attr_accessible :content, :published_at, :status, :title, :type, :user_id
  has_many :entity_categories
  has_many :entity_pages
end

帖子有 type 字段,用于指定帖子的类型(例如,常规、新闻等)。
我想在这个模型中使用多个控制器和视图(新闻应该使用与常规帖子不同的模板和逻辑)。
例如,如果 type == regular 它必须使用名为 CommonPost 的控制器及其模板。
我该如何解决这个问题?

【问题讨论】:

  • 你不想创建类RegularPost
  • 恕我直言,您不需要不同的控制器。你只需要有条件地渲染不同的布局/视图。
  • 类似的东西会对你有所帮助。 stackoverflow.com/questions/3025784/rails-layouts-per-action
  • 谢谢@oldergod。你给了我正确的想法。请将您的评论转换为答案并完成。我在项目的models 部分创建了新类,并从基本模型(RegularPost

标签: ruby-on-rails ruby model


【解决方案1】:
migration CreatePostTable

class Post < ActiveRecord::Base
  attr_accessible :content, :published_at, :status, :title, :type, :user_id
  has_many :entity_categories
  has_many :entity_pages
end

class RegularPost < Post
end

class SpecialPost < Post
end

在您的数据库中,您只有一个 Post 表,Rails 会自动将类型列设置为正确的类。

如你所愿

puts RegularPost.new.type
# => "RegularPost"

然后您创建regular_posts_controller、spcial_posts_controller 等,您就可以开始了。是你要找的吗?

【讨论】:

    【解决方案2】:

    如果我对您的理解正确,您仍然可以使用一个控制器,您只需要不同的视图。在你的控制器中,你可以让你的 if type == regular 然后渲染 commonpost。

    您可以在其中放置任意数量的逻辑和代码,但您可以根据类型在 Post 控制器中拆分并执行不同的操作。

    希望对你有帮助

    【讨论】:

    • 非常感谢。具有特定逻辑的单个控制器是一个好主意,因为代码更易于管理。如果没有更好的想法,我会使用你的想法。特别感谢您的快速回答:)
    • 是的,没问题。此外 - 对于某些事情,例如编辑或删除,您可能希望呈现相同的事情,因此使单个控制器更有用
    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多