Tag: 模型

更智能的回形针validation

我在rails应用程序中使用paperclip,并在我的模型中进行以下三次validation validates_attachment_presence :photo validates_attachment_size :photo, :less_than=>1.megabyte validates_attachment_content_type :photo, :content_type=>[‘image/jpeg’, ‘image/png’, ‘image/gif’] 如果用户忘记添加附件,则所有三个validation都会失败,因此会向用户显示以下三个错误: # Photo file name must be set. # Photo file size file size must be between 0 and 1048576 bytes. # Photo content type is not included in the list 我认为最好只显示此实例中的第一个错误,因为其他两个错误纯粹是后果…我希望用户只有在添加附件但不符合时才会看到后两个错误validation标准。 我确定没有预先出现的validation可以做这种事情,并且通过阅读vendor / plugins / paperclip / lib / paperclip.rb中的代码,我看到validates_attachment_size方法支持:unless参数如下所示: def validates_attachment_presence name, […]

Rails:自我指导有多少模型有效?

所以,我正在开发一个应用程序,我希望用户能够在“文件夹”中对对象进行分组。 基本上: User has_many :foos Foos不必在文件夹中,但它们可以。 在这种情况下: Folder has_many :foos和Foo belongs_to :folder 现在,我希望能够设置文件夹,以便它们可以嵌套。 我觉得这就像…… Folder has_many :folders 我听说这种自我指涉关系没什么大不了的,但我真的不知道它是如何运作的。 我无法弄清楚应该如何在模型中声明这个以及我需要在数据库中提供哪些列。 有人可以提供一个例子吗? 我还重视您在应用程序中建立此类关系时可能提供的任何建议/提醒/警告/经验教训。 谢谢!

如何组织太胖的Rails模型?

将逻辑从控制器转移到模型中是一种很好的做法。 但是在任何复杂的系统中,即使大多数方法按照Rails方式是一个衬里,这也总是导致一个非常大的文件。 我已经将模型拆分成其他模块并将它们包含在原始模型中,例如, model_flags , model_validation等。任何人都有更好的方法吗? 编辑:我选择了一个建议使用ActiveConcern的新答案。 此外,对于任何对组织代码感兴趣的人,本文“ 使ActiveRecord模型变薄 ”应该会有很大帮助。

Ruby on Rails从一个表单中保存两个表

我有两个型号酒店和地址。 关系是: class Hotel belongs_to :user has_one :address accepts_nested_attributes_for :address 和 class Address belongs_to :hotel 我需要从一个表单中保存在酒店表和地址表中。 输入表单很简单: ……other hotel fields…… ……other address fields…… 酒店控制器: class HotelsController < ApplicationController def new @hotel = Hotel.new end def create @hotel = current_user.hotels.build(hotel_params) address = @hotel.address.build if @hotel.save flash[:success] = "Hotel created!" redirect_to @hotel else render 'new' end end […]

为什么attr_accessor在Ruby on Rails中破坏了这个模型中的现有变量?

最近我被这种情况所困扰,确切地知道发生了什么事情是有用的,所以其他人避免这种错误。 我有一个模型用户,其架构如下: create_table “users”, :force => true do |t| t.string “user_name” t.string “first_name” t.string “last_name” t.string “email” t.string “location” t.string “town” t.string “country” t.string “postcode” t.boolean “newsletter” 在类user.rb中,我有三个方法的attr_accessor: class User < ActiveRecord::Base # lots of code attr_protected :admin, :active # relevant accessor methods attr_accessor :town, :postcode, :country end 现在在我的用户控制器中,如果我有以下方法: def create @user = User.new params[:user] […]

Rails简单表单自定义关联选择字段

我有一个select字段,我想在其中放一个名为name的自定义属性,我试着这样做: User.lawyer.map{ |l| [l.name, l.id, {:name => l.name.downcase}] } %> 它工作并生成额外的属性,但是有一个问题,选择值属性被更改为模型名称属性,在本例中为l.name。 我更改了地方并首先放置了l.id但是显示了id属性,它们是重复的,任何想法为什么会发生这种情况? 是否有另一种方法可以在关联选择字段中定义自定义属性?

在rails 3中模拟用户的消息

我构建了以下模型来处理用户的消息交换: create_table “messages”, :force => true do |t| t.integer “source_id” t.integer “destination_id” t.string “object” t.string “body” t.datetime “created_at” t.datetime “updated_at” end 这些是它的联想: class Message ‘User’, :foreign_key=>’source_id’ belongs_to :reciever, :class_name=>’User’, :foreign_key=>’destination_id’ end 而这些是另一方的关联(用户模型): has_many :sent_messages, :class_name=> ‘Message’, :foreign_key=>’source_id’, :dependent=>:destroy has_many :recieved_messages, :class_name=> ‘Message’, :foreign_key=>’destination_id’, :dependent=>:destroy 该模型是正确的并且正常工作,实际上从我可以检索的消息中,谁是发送者,谁是接收者,从用户,我可以获得所有发送和接收的消息。 不幸的是,它不处理任何情况:如果接收者或发送者删除消息怎么办? 消息是独一无二的,所以它在两边都消失了(坏事)。 如何知道其中一方是否已阅读该消息? 有什么建议吗? 你认为我必须重新计划吗? TNX

Rails gem rails3-jquery-autocomplete:如何查询多个字段

我正在使用这里找到的rails3-jquery-autocomplete gem: http : //github.com/crowdint/rails3-jquery-autocomplete 有关如何查询模型的单个属性的说明很明确,我可以毫无问题地完成这项工作。 但是,我的Person模型有两个我想要组合和查询的属性。 它们是first_name和last_name 。 我想将它们组合成一个名为full_name的伪属性。 目前,我收到此错误: ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: full_name: SELECT “people”.* FROM “people” WHERE (LOWER(full_name) LIKE ‘cla%’) ORDER BY full_name ASC LIMIT 10): 虽然我在Person模型文件中有以下方法,但Person模型没有full_name属性: def full_name “#{self.first_name} #{self.last_name}” end 如何修改Person模型文件,以便对full_name调用查询数据库以匹配first_name和last_name的组合?

如何从另一个关联模型的视图编辑模型的属性

我有一个has_one个人资料的用户模型。 用户模型具有name属性,该属性在用户注册时设置。 但是,我想让用户从配置文件的编辑视图中更新该name属性。 我怎样才能做到这一点?

类别和子类别模型轨道

如果不使用任何gem,我如何在rails中执行此操作? 主要类别 子类别 子类别 子类别 主要类别 子类别 子类别 子类别 主要类别 子类别 子类别 子类别 我有一个由|组成的表 id | level1 | level2 | 1级是主要类别,2级是子类别 我想在上面的视图中显示它。 在互联网上四处看看之后,每个人似乎都建议使用类似行为的gem,但我想避免使用它们,因为我对rails很新,我想了解如何做事而不是转向gem。 你的帮助很大 模型: class Category “Category”, :foreign_key => “parent_id”, :dependent => :destroy belongs_to :parent_category, :class_name => “Category” end 控制器: class CataloguesController < ApplicationController layout 'main' def index @cats = Catalogue.all end def categories […]