这几天笔者投入了ROR的实践中,开始重写2年前用appfuse(Spring+Hibernate+JSF)写的一个物资管理小系统。原因无它,自产自用,业务逻辑成熟,并积累了一定的数据量。
刚一开始就碰到个也许是简单的问题吧,花了点功夫没搞定,在此请教同道:
用户信息简单地存储在users表中,主要字段为:id,username,password,real_name
设备购买主记录表为eq_buy_master,涉及到关联的字段为:manager,buyer,accepter,operator
因外键都关联到users,故无法使用超方便的user_id。
于是在User中设has_many,写法为:
has_many :eqbuymaster
EqBuyMaster中设belongs_to,并仿“Agile Rails”中第231页的做法,如下写:
belongs_to :user, :class_name => 'User', :foreign_key => 'manager'
于是在_form.rhtml中用select的写法为:
<%= collection_select(:eq_buy_master, :manager, @all_users, :id, :real_name) %>
在show.rhtml中显示realname的写法为:
<%= @eq_buy_master.user.real_name %></p>
使用正常。
但此处有四个字段都关联,这种做法在_form.rhtml中是正常的,但show.rhtml中显示出来的全都是:manager关联的值,显然不对。在EqBuyMaster中的belongs_to部分用过[]或{},都会报错,不知如何写?
分享到:
相关推荐
在这个项目中,`User`和`Image`模型可能会与数据库中的相应表关联,通过定义属性和关系,如`has_many :images`表示一个用户可以拥有多个图片。 5. **路由配置**: Rails的路由系统将URL映射到控制器的行动上,如`/...
- **示例**:例如,在博客系统中,一篇文章可以有多个评论,这就是典型的“一对多”关系。 #### 四、查询 - **方法**:使用Active Record的方法来进行数据库查询,如`find`、`where`、`joins`等。 - **优化**:...
- **创建复杂表单**:介绍如何构建包含多个嵌套字段的复杂表单。 #### ActionController概览 - **控制器的作用**:解释控制器在MVC架构中的角色。 - **控制器命名约定**:说明控制器命名的规则和约定。 - **方法和...
- 示例:通过`rails generate scaffold Topic title:string description:text`创建一个Topic模型及其关联的CRUD操作。 - **整合Bootstrap与版型设置**:介绍如何将Bootstrap框架集成到Rails应用中,并设置基础版型...
3. 模型关联管理:RailsAdmin 支持处理多对一、一对一、多对多等复杂关联关系,可以方便地在管理界面中展示和操作关联数据。 4. 自定义视图:RailsAdmin 允许开发者通过简单的配置,定制列表视图、表单视图以及其他...
这里的 `spouse_id` 是 `Person` 表中的一个字段,用于关联其配偶。 #### 三、多对多 (Many-to-Many) **示例场景**:考虑一个学生可以选修多门课程,同时一门课程也可以被多名学生选修的情况。 **数据库结构**: ...
6. **继承支持**:与ActiveRecord类似,MongoModel支持单继承,一个父类可以有多个子类,子类会继承父类的字段和方法。 7. **关联**:尽管MongoDB不像关系型数据库那样强调关系,但MongoModel还是提供了基本的关联...
4. **模型和迁移**:在Rails中,我们使用ActiveRecord模型来定义数据表结构。例如,如果你有一个`Book`模型,可以创建一个迁移文件来创建`books`表: ``` bundle exec rails generate migration CreateBooks title...
在Rails项目中,我们通常会创建一个模型来处理这些数据,比如创建一个`City`模型,包含`province_id`、`name`等字段,代表城市与所属省份的关系。`province_id`是外键,关联到`Province`模型的主键。同样,我们还...
综上所述,“rails/简易报告整理网页版”项目展示了Rails基础应用的构建,涵盖了从数据模型、用户交互到数据可视化等多个核心环节,对于初学者来说,这是一个很好的学习和实践案例。通过深入理解这些知识点,开发者...
##递归删除当您在 Rails 中调用 Record.destroy 时,它会实例化其所有关联(即 :dependent => :destroy)并在每个关联上调用 destroy。 这是一个 N + 1,如果将关联设置为 :dependent => :delete_all,则可以删除...
例如,一个用户可以有多个帖子(posts): ```ruby class User has_many :posts end class Post belongs_to :user end ``` 在这个例子中,可以通过用户对象访问其关联的帖子,如`user.posts`。 TDD(Test-...
在多租户架构中,一个单一的应用程序可以服务于多个独立的客户(称为租户),每个租户的数据被隔离,彼此不可见。Acts As Tennant库通过共享数据库的策略实现这一目标,而不是为每个租户创建单独的数据库。 描述中...
在Rails中,我们需要创建一个`Message`模型,包含必要的字段如发送者(sender)、接收者(recipient)、消息内容(content)以及时间戳(created_at)。此外,可能还需要考虑消息的状态(如未读或已读),这可以通过...
总结,优化Rails系统需要全面考虑数据库、缓存、代码、服务器配置等多个层面。理解系统的工作原理,针对性地进行优化,是提升复杂Rails系统性能的关键。在实践过程中,持续监控、分析和调整,才能确保应用始终处于...
### ActiveRecord在Ruby与Rails中的应用 #### 一、前言 《Pro ActiveRecord:Databases with Ruby and Rails》这本书深入探讨了如何使用ActiveRecord这一对象关系映射(Object Relational Mapping, ORM)工具来...
4. **多数据库支持**: 支持连接多个数据库,并能够在不同的数据库之间切换。 5. **安全性**: ActiveRecord提供了安全措施来防止SQL注入攻击。 #### 六、实战案例分析 本书还包含了许多实际应用场景的案例研究,例如...
书中提到的多个商标均受到保护,如“The Pragmatic Starter Kit”、“The Pragmatic Programmer”等。 - **编写态度**:作者在准备本书时采取了严谨的态度,但在使用本书包含的信息(包括程序列表)时,出版社不对...
通过ActiveRecord,开发者可以直接在模型类中定义表结构、字段、关联关系等,而无需编写复杂的SQL语句。 **2.3 ActionPack:视图与控制器** ActionPack提供了构建控制器和视图所需的工具。它包含了一系列帮助器...