在我的Rails应用程序中,我有一个标准的用户和angular色之间的多对多关系: class User < ActiveRecord::Base has_many :user_roles has_many :roles, :through => :user_roles end 我想确保用户只能分配一次任何angular色。 任何尝试插入重复应该忽略请求,不会抛出错误或导致validation失败。 我真正想要表示的是一个“集合”,插入已经存在于集合中的元素不起作用。 {1,2,3} U {1} = {1,2,3},而不是{1,1,2,3}。 我意识到我可以这样做: user.roles << role unless user.roles.include?(role) 或者通过创build一个包装方法(例如add_to_roles(role) ),但是我希望有一些惯用的方法使它通过关联自动化,这样我可以写: user.roles << role # automatically checks roles.include? 它只是为我做的工作。 这样,我不必记得检查dups或使用自定义的方法。 在我失踪的框架中有什么东西吗? 我首先想到:has_many的uniq选项可以实现,但基本上只是“select不同”。 有没有办法做到这一点声明? 如果没有,也许通过使用关联扩展? 以下是默认行为失败的一个例子: >> u = User.create 用户创build(0.6ms)INSERT INTO“users”(“name”)VALUES(NULL) =>#<用户标识:3,名称:nil> >> u.roles << Role.first angular色负载(0.5ms)SELECT […]
假设你在一个Ruby on Rails应用程序中有一个ActiveRecord :: Observer – 你如何用rSpectesting这个观察者?
例如,我想转换这个; $this->db->get('table'); 对此; 'SELECT * FROM table' 有没有这个function? 我search了CI的用户指南,但没有find任何解决scheme。
attr_accessible(*attributes)和attr_protected(*attributes)什么attr_protected(*attributes) ? 例子会很好。 我看到很多开发者在他们的模型中使用这些。 我search了不同的地方,但我不明白他们是什么。 在不同的情况下,重要性和必要性是什么?
我有一个模型Foo与属性id, name, location 。 我有一个Foo的实例: f1 = Foo.new f1.name = "Bar" f1.location = "Foo York" f1.save 我想复制f1和从该副本,创buildFoo模型的另一个实例,但我不希望f1.idinheritance到f2.id (我不想明确指定,我想要的数据库处理它,因为它应该)。 有没有简单的方法来做到这一点,而不是手动复制每个属性? 任何内置函数或将写入一个是最好的路线? 谢谢
潜在的愚蠢的问题,但我只是没有得到它。 如果我做 widget = Widget.find_or_create_by_widgetid(:widgetid => "12345", :param2 => "folk") 等等,那么我怎么知道,如果newobj是一个发现或新创build的小工具? 有什么我可以有条件地testing小部件,会告诉我?
我有一个模型关系, today有许多tasks 我试图检索用户的today对象,包括tasks并把它们都呈现给Json。 所有这一切都很好,直到我决定我想要在today对象内tasks ,因为respond_with block也用于渲染html页面。 有什么办法可以包括这些tasks并订购? 我正在尝试这样的事情: class TodaysController < ApplicationController respond_to :html, :json def show @today = Today.where(:user_id => current_user.id).joins(:tasks).includes(:tasks).order(:priority).first respond_with @today, :include => :tasks end end 这检索正确的一切,但似乎并没有sorting的任务。 这是我曾经有过的(工作很好,但没有sorting): class TodaysController < ApplicationController respond_to :html, :json def show @today = current_user.today respond_with @today, :include => :tasks end end 我知道我可以检索数据,并按照如下方式进行sorting: @today = current_user.today @today.tasks.sort!{|a,b| […]
免责声明,我对Rails了解甚less。 我会尽量简洁。 鉴于Rails中的以下模型关系: class ModelA < ActiveRecord::Base belongs_to :ModelB … class ModelB < ActiveRecord::Base has_many :ModelA 当调用ModelA控制器的show动作时,返回的JSON应该显示所有ObjectA,它们是所讨论的ObjectA所属ObjectB的子对象。 所以如果我有一个ObjectB包含ID为1,2和3的ObjectA,然后访问:/modela/1.json 我应该看到: { "modelb": { "id": "1", "modela": [insert the ModelA JSON for ID's 1, 2 and 3] } }
我创build了一个新的表格,包括一个“注释”列。 默认是varchar(255)我相信,但我希望这个列是一个文本区域与字段,并允许更多的数据。 我想我会在ActiveRecord :: Migration文件中做这个改变,但我很好奇格式。 例如,我是否简单地将varchar(255)更改为varchar(1000)? (如果是这样的格式? def self.up create_table :notes do |t| t.string :note :varchar(1000) end 这是正确的格式? 此外,我如何获得input字段为多行。 对不起,如果这是简单的东西,但我是编程和RoR的新手。 谢谢。
这是一个嵌套select与包括: @items = Item.where("complete = ?", true).includes( :manufacturer, {:order=>[:supplier, :agent] }) 这是一个征税查询,因为它从所有上面包含的表中抽取1000行数据。 我怎样才能得到查询只select特定的领域? user.name,user.created_at order.created_at 供应商名称 代理名称 生产商名称