标签: activemodel

在rails中的ActiveRecord对象中跟踪脏的非持久属性

我有一个从ActiveRecord继承的对象,但它有一个不在DB中持久化的属性,如:

 class Foo < ActiveRecord::Base
   attr_accessor :bar
 end
Run Code Online (Sandbox Code Playgroud)

我希望能够使用ActiveModel Dirty提供的'bar_changed?'等方法跟踪'bar'的更改.问题是,当我尝试在此对象上实现Dirty时,如文档中所述,我收到错误,因为ActiveRecord和ActiveModel都定义了define_attribute_methods,但是参数数量不同,所以我在尝试时遇到错误调用define_attribute_methods [:bar].

define_attribute_methods在包括之前尝试了别名ActiveModel::Dirty,但没有运气:我得到一个未定义的方法错误.

关于如何处理这个问题的任何想法?当然我可以手动编写所需的方法,但我想知道是否可以使用Rails模块,通过将ActiveModel功能扩展到ActiveRecord未处理的属性.

activerecord activemodel ruby-on-rails-3

26
推荐指数
1
解决办法
8308
查看次数

ActiveModel :: MassAssignmentSecurity ::错误:无法批量分配受保护的属性

如果我尝试执行以下代码:

hassle = rota.hassles.create(:sender => user1, :receiver => user2, :type => "sms")
Run Code Online (Sandbox Code Playgroud)

我听到以下错误:

Failure/Error: hassle = rota.hassles.create(:sender => user1, :receiver => user2, :type => "sms")
 ActiveModel::MassAssignmentSecurity::Error:
   Can't mass-assign protected attributes: type
Run Code Online (Sandbox Code Playgroud)

我不确定这意味着什么.我已经使:type是必须的,所以如果我删除它,我得到一个SQL错误.

ruby-on-rails activemodel

26
推荐指数
3
解决办法
3万
查看次数

通过模块共享范围?

我想通过将共享范围移动到模块中来干掉几个模型,例如:

module CommonScopes
  extend ActiveSupport::Concern

  module ClassMethods
    scope :ordered_for_display, order("#{self.to_s.tableize}.rank asc")
  end
end
Run Code Online (Sandbox Code Playgroud)

我还想创建测试模块的共享规范.不幸的是,当我尝试在我的模型中包含共享范围时,我得到:

undefined method `order' for CommonScopes::ClassMethods:Module
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

activerecord scope rspec ruby-on-rails activemodel

22
推荐指数
2
解决办法
6470
查看次数

如何建立一对多的关系?

我有以下型号:

User (id, name, network_id)
Network(id, title)
Run Code Online (Sandbox Code Playgroud)

我需要添加什么样的Rails模型关联才能执行以下操作:

@user.network.title
@network.users
Run Code Online (Sandbox Code Playgroud)

谢谢

activerecord ruby-on-rails activemodel ruby-on-rails-3

22
推荐指数
2
解决办法
2万
查看次数

在哪里放置ActiveModel :: Validator?

我试着关注http://api.rubyonrails.org/classes/ActiveModel/Validator.html,但我应该把它放在哪里

 class MyValidator < ActiveModel::Validator
    def validate(record)
      if some_complex_logic
        record.errors[:base] = "This record is invalid"
      end
    end

    private
      def some_complex_logic
        # ...
      end
  end
Run Code Online (Sandbox Code Playgroud)

ruby validation ruby-on-rails activemodel

21
推荐指数
1
解决办法
4483
查看次数

如何在模型之间生成关联

我想知道如何在Rails中正确地进行关联.首先,我创建了一个城市模型和一个组织.现在我希望组织有一个城市...这是通过添加has_manyhas_one关联来完成的.之后我跑了rake db:migrate.但不知何故,它不会创建一个字段citycity_id在我的数据库模型中.我自己必须这样做吗?rails现在不应该在数据库中创建外键约束吗?

要查看它是否有效我正在使用rails c并输入Organisation 答案如下:

=> Organisation(id: integer, name: string, description: string, url: string, created_at: datetime, updated_at: datetime) 
Run Code Online (Sandbox Code Playgroud)

请原谅我的愚蠢问题......我是Rails的初学者,一切都还是很陌生.

谢谢!


市:

class City < ActiveRecord::Base
  has_many :organisations
end
Run Code Online (Sandbox Code Playgroud)

组织:

class Organisation < ActiveRecord::Base
  has_one :city
end
Run Code Online (Sandbox Code Playgroud)

创建城市:

class CreateCities < ActiveRecord::Migration
  def change
    create_table :cities do |t|
      t.string :name
      t.string :country

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

创建组织:

class CreateOrganisations < ActiveRecord::Migration
  def change
    create_table :organisations do |t|
      t.string …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails activemodel ruby-on-rails-3.1

20
推荐指数
1
解决办法
2万
查看次数

报告记录验证警告和错误的有效方法?

我有一个Rails项目,就像在大多数应用程序中一样,我们有许多硬性和快速的验证规则,所有对象在持久化之前必须符合这些规则.当然,ActiveModel的Validations是完美的 - 我们使用Rails默认值和我们自己的手动验证的组合.

但是,我们越来越多地反对用例,我们希望提醒用户注意这样的情况:尽管他们的数据在最严格的意义上是无效的,但是他们应该审查哪些元素,但哪些不应该本身可防止记录持久性发生.几个例子,在我的头顶:

  • 已经在所有CAPS中提交了帖子标题,这可能是有效的,但可能不是
  • 一个正文文本比一个建议的单词数量少于或多于x个单词

验证模块是我们如何处理验证错误的一个很好的比喻 - 并且有很多匹配器已经可用 - 理想情况下我希望能够重用该基本代码,但同时生成一组warnings项目errors.这将使我们能够以不同的方式突出显示这些案例,而不是暗示可能违反房屋风格等同于更严重,严格执行的规则.

我查看了诸如activemodel-warnings之类的 gem ,但它们通过改变在验证记录时检查哪些匹配器,相应地扩展或缩小errors集合来工作.类似地,我查看:on了验证的内置参数,看看我是否可以手动滚动,但是所有违规都会在错误集合中结束而不是分离出来.

有没有人尝试过类似的东西?我无法想象我是唯一一个想要实现这一目标的人,但我现在正在画一个空白......

validation ruby-on-rails activemodel

18
推荐指数
2
解决办法
2113
查看次数

Rails 3.0中的默认验证错误消息在哪里?

Rails 3.0中的默认验证错误消息在哪里?例如,ActiveRecord :: Error.default_error_messages [:take]的等价物是什么?我发现ActiveModel处理错误而不是ActiveRecord,但我自己找不到错误.

validation ruby-on-rails activemodel ruby-on-rails-3

17
推荐指数
1
解决办法
7312
查看次数

rails 3:如何为现有数据库表生成模型

我已经将我的database.yml配置为指向我现有的mysql数据库

我怎样才能从中生成模型?

rails generate model existing_table_name
Run Code Online (Sandbox Code Playgroud)

只提供一个emty模型..

ruby activemodel ruby-on-rails-3

17
推荐指数
2
解决办法
3万
查看次数

使用Mongoid获取实际的结果数组

随着Rails的一个普通的ActiveRecord/SQL设置在控制台当我执行命令*.where,*.all等我回来的记录项的实际阵列.但是,在切换到Mongoid之后,我改回了一个标准.我如何获得实际结果?

这就是我现在得到的......

ruby-1.9.2-p180 :001 > App.all
 => #<Mongoid::Criteria
  selector: {},
  options:  {},
  class:    App,
  embedded: false>
Run Code Online (Sandbox Code Playgroud)

activemodel mongoid ruby-on-rails-3

17
推荐指数
2
解决办法
7267
查看次数