ruby-on-rails - 将 Rails 中的两个模型组合为一个表单

标签 ruby-on-rails ruby activerecord forms model

我对 Rails 非常陌生,我一直在构建 CMS 应用程序 后端。

一切都很顺利,但我想知道这是否可能?

基本上我有两个模型:

@page { id, name, number }

@extended_page { id, page_id, description, image }

这个想法是有一堆页面,但并非所有页面都有 扩展内容。如果有一个页面带有扩展 内容然后我希望能够有一个允许编辑的表单 他们俩。

在 Controller 中:

@page = Page.find(params[:id])
@extended= Extended.find(:first, :conditions => ["page_id =
?",@page.id])
@combined = ... #merge the two somehow

所以在 View 中:

<%- form_for @combined do |f| %>

<%= f.label :name %>
<%= f.text_field :name %>

...

<%= f.label :description %>
<%= f.text_field :description %>

<%- end >

这样在 Controller 中,只需有一个模型即可 已更新(这将同时更新)。

这可能吗?

最佳答案

首先,我认为您不需要为此使用第二个模型。您可以简单地为 Page 模型定义方法 extended?,如果扩展页面模型的所有(或任何)属性都存在,则该方法返回 true

您可能还想研究一下 fields_for 表单辅助方法。您应该看到这样的事情:

<%- form_for @combined do |f| %>

<%= f.label :name %>
<%= f.text_field :name %>

<%- f.fields_for(:extended_page) do |ef| %>

  <%= ef.label :image %>
  <%= ef.file :image %>
  <!-- other extended page form fields -->

<%- end %>

<!-- Other page form fields -->
<%- end %>

关于ruby-on-rails - 将 Rails 中的两个模型组合为一个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947054/

相关文章:

jquery - Masonry 图像与 Rails 3 + Turbolinks + Mozilla 的重叠问题

ruby-on-rails - 什么确定 rails 是否包含 id : :serial in a table definition?

ruby-on-rails - 如何制作基于时间的问候语

不使用 Rails 的 Ruby ActiveRecord 无法保存

ruby-on-rails - PostgreSQL + Rails citext

ruby-on-rails - Ruby/Rails 调试 : Break when a value of an object/variable changes

ruby-on-rails - 覆盖Devise的注册 Controller ,以在成功完成注册后允许重定向

ruby - ruby 哈希中 bool 值的排列

ruby-on-rails - 使用 collection_select 并从 sqlite3 收到意外错误 - 有人知道为什么吗?

php - Zend 框架模型,Active Record 模式替代方案