Tag: 模型

覆盖gem中的模型,添加回调和方法

我在我的应用程序上安装了ActiveRecord信誉系统。 我如何重写或向评估模型添加回调/方法? 一般来说,如何为您安装的gem添加任何模型?

在Rails中inheritance用户模型真的很糟糕吗?

我从Rails得到了很多回击,因为我将User子类化为许多不同的子类。 在我的应用程序中,并非所有用户都是平等的 实际上有很多模型对象,并不是每个用户类型都可以访问它们。 我还需要一种方法来做多态行为。 例如,根据类型,许多方法的行为会有所不同。 这不是多态性的意思吗? 但事实是,我总是从Rails中退出。 默认值 – 特别是表单提交给参数哈希的方式 – 似乎像非子类模型一样工作。 链接和参数哈希只是默认设置真正咬你的两种方式。 在Rails中为不同类型的用户处理复杂逻辑的“正确”方法是什么? 在Java中,子类化模型可以工作 – 您不必通过箍来使其按照您希望的方式工作。 但是在Rails中,很难让子类使用REST约定,当你忘记包含:as => :user时它会惩罚你,或者当你在链接中放入子类对象时会惩罚你,例如edit_user_path(@user) < – 坏主意! 还有一个区域也很难处理。 假设我有一个Company模型,它有很多Users 。 这些用户可以是导演,教师,学员等 – 所有不同的子类。 当我们创建帐户时,我们可能希望使用accepts_nested_attributes_for :users 。 但是,如果我们使用它,我们就不能指定它创建的类。 血淋淋的地狱! 似乎Rails中的所有内容都不希望您将模型子类化。 如果你没有子类,一切都“正常”。 但如果你是子类,那你就是为了地狱。 解决办法是什么?

Rails:修改脚手架生成的模型

如何修改使用建模生成的模型? 例如,模型myModel最初有列a,b和c,但我现在想要添加列d。

Rails将validation放在模块mixin中?

在我的模型中,一些validation是重复的: validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 我怎么把它放在mixin中? 如果我把它们放在mixin中,我会收到这个错误 app/models/validations.rb:5: undefined method `validates’ for Validations:Module (NoMethodError)

Rails:瘦控制器与胖模型,或者我应该让我的控制器厌食?

我知道之前已经回答了类似的问题 – 例如: 逻辑应该去哪里 在哪里做某些任务等 但是我有一个更具体的问题 – 我应该采取多少这个公理: 保持你的控制器瘦,让你的模特变胖! 这是一个例子: 例如,假设我有多个validation数据源。 一个很好的例子是VIN号码 – 我可以对它进行validation,制造商数据源,DMV的数据源,以及我的本地数据库 – 看看我记录的内容。 所以我有一个名为Vin和vins_controller的模型。 在模型里面我有5种方法: check_against_local_db check_against_dmv check_against_car_maker_1 check_against_car_maker_2等 在我的控制器中保持REST,在动作节目中 – 我有一个简单的case语句,它查看params [:source],并根据指定的源 – 将调用特定的check方法。 现在问题是:我应该保留控制在控制器中调用哪个数据源的逻辑,还是应该将其移动到模型中,然后在控制器中执行类似check_vin(source,vin)的操作? 我应该让我的控制器厌食吗? 编辑 我将此转换为来自@ jay-godse的官方回答(谢谢 – 当时这是一个很好的答案)。 自2010年以来情况发生了很大的变化,这个问题仍然得到了一些看法 – 所以希望这会指出一些人正确的方向并帮助他们正确地组织他们的代码。 开拓者gem解决了问题中提出的问题。

Ruby on Rails – 从模型访问控制器变量

我试图访问在模型中的控制器中设置的实例变量。 控制器是产品控制器,型号是产品型号。 实例变量是另一个名为account的模型的实例。 实例变量是@current_account 当我运行代码没有任何反应时,我没有收到错误。 有谁知道在哪里可以找到关于模型中控制器中设置的访问实例变量的内容? 谢谢 EEF

Rails形成validation条件绕过

我有一个rails模型,可以validation2个表单值的唯一性。 如果这两个值不唯一,则显示validation错误,并将“提交”按钮更改为“重新提交”。 我想允许用户单击“重新提交”按钮并绕过模型validation。 我想从railsvalidation文档中做这样的事情: validates_uniqueness_of :value, :unless => Proc.new { |user| user.signup_step <= 2 } 但是我的模型中没有值,我可以检查…只是具有“重新提交”值的参数。 关于如何做到这一点的任何想法?

如何使用Ruby on Rails将数据从控制器传递到模型?

如何将数据从控制器传递到模型? 在我的application_controller我获取用户的位置(州和城市)并包含一个before_filter ,以便通过所有控制器访问它 before_filter :community def community @city = request.location.city @state = request.location.state @community = @city+@state end 然后我尝试通过以下方法将控制器中检索到的数据添加到模型中: before_save :add_community def add_community self.community = @community end 但是,数据从未从控制器传递到模型。 如果我使用: def add_community @city = request.location.city @state = request.location.state @community = @city+@state self.community = @community end request.location.city和request.location.state方法不能从模型中运行。 我知道其他一切都有效,因为如果我将@city和@state定义为字符串,在def_community下,那么一切正常,除了我没有动态变量,只是放在模型中的字符串。 此外,我知道请求在控制器/视图中工作,因为我可以让它们显示正确的动态信息。 问题只是将数据从控制器传递到模型。 非常感谢你的时间。