Rails:虚拟属性和表单值

2024-03-21

我有一本带有虚拟属性的模型书,用于从书籍表单创建编辑器。 代码如下:

class Book < ActiveRecord::Base
  has_many :book_under_tags
  has_many :tags, :through => :book_under_tags
  has_one  :editorial
  has_many :written_by
  has_many :authors, :through => :written_by

  def editorial_string
   self.editorial.name unless editorial.nil?
   ""
  end
  def editorial_string=(input)
    self.editorial = Editorial.find_or_create_by_name(input)
  end
end

以及新形式:

<% form_for(@book,
            :html => { :multipart => true }) do |f| %>
  <%= f.error_messages %>

...
  <p>
    <%= f.label :editorial_string , "Editorial: " %><br />
    <%= f.text_field :editorial_string, :size => 30  %> <span class="eg">Ej. Sudamericana</span>
  </p>
 ...

这样,当表单数据未通过验证时,重新显示表单时我会丢失在编辑字段中提交的数据,并且还会创建一个新的编辑器。我该如何解决这两个问题?我对红宝石很陌生,找不到解决方案。

更新我的控制器:

  def create
    @book = Book.new(params[:book])
    respond_to do |format|
      if @book.save
        flash[:notice] = 'Book was successfully created.'
        format.html { redirect_to(@book) }
        format.xml  { render :xml => @book, :status => :created, :location => @book }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @book.errors, :status => :unprocessable_entity }
      end
    end
  end

我相信它的原因是你的 Book#editorial_string 方法将始终返回“”。可以简化为以下内容:

  def editorial_string
   editorial ? editorial.name : ""
  end

根据评论更新:

听起来你想要做嵌套表单。 (看api 文档中的 Accepts_nested_attributes_for http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#M002422)注意这是 Rails 2.3 中的新功能。

所以如果你更新你的 Book 类

class Book < ActiveRecord::Base
  accepts_nested_attributes_for  :editorial
  ...
end

(您现在也可以删除 editorial_string=, editorial_string 方法)

并将您的表单更新为如下所示

...
<% f.fields_for :editorial do |editorial_form| %>
  <%= editorial_form.label :name, 'Editorial:' %>
  <%= editorial_form.text_field :name %>
<% end %>
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails:虚拟属性和表单值 的相关文章

随机推荐

  • 大型 Org-mode 文件中的光标移动缓慢以及“org-do-latex-and-lated”函数

    在一个几乎有 5000 行的 org 文件中 滚动速度慢得难以忍受 除非我转动font lock mode离开 检查发生了什么profiler 减速的主要原因是函数org do latex and related 定义于org el 似乎它
  • 如何使用 wlst 更新应用程序

    从控制台如果 1 要更新应用程序 1 所做的是 1 单击部署 2 选择应用程序名称并单击更新选项 3 这里他可能会改变 i Source Path ii Deployment Plan 现在 在我的应用程序中没有指定计划路径 因此要更新应用
  • Spring boot打包后找不到资源文件

    我使用 Spring boot maven 插件将应用程序打包为 jar 文件 可以找到资源文件直接在Intellij IDEA中运行 但之后找不到资源文件 显示错误为 java io FileNotFoundException 类路径资源
  • 修改清单文件 Win32 Visual Studio 2022

    如何在 Visual Studio 2022 中 修改 生成 Win32 应用程序的程序集清单文件 项目属性 gt Win32 资源 gt 清单路径设置为 gt 使用默认设置嵌入清单 我可以将其设置为使用自定义清单 但我想要做的是获取具有默
  • 如何在 DIV 元素上合成浏览器单击事件?

    通过按钮 我可以调用click 方法来生成点击 然而 DIV 并非在所有浏览器上都具有此方法 但我可以将点击事件侦听器附加到它们 通过设置 onclick 或添加事件监听器 有什么方法可以让我以编程方式 合成 对此类元素的点击 但是不使用
  • 如何将字符串转换为浮点数组?

    您将如何转换字符串 比方说 string Numbers 0 3 5 7 9 8 6 2 0 54 6 3 转换为浮点数组 例如 float Numbers 6 0 3 5 7 9 8 6 2 0 54 6 3 我会使用来自的数据结构和算法
  • c# OCR无法识别数字(tesseract 2)

    I m trying to extract digits from the following 它失败了 我得到了 作为回报 我正在使用 google 的 tesseract 2 使用 C 开源 c 包装器 现在我想知道 这个图像是否太糟糕
  • 如何检查for循环内的唯一性?

    有没有办法检查切片 映射是否存在值 我想为切片添加一个值only如果是的话not存在于切片中 这可行 但看起来很冗长 有一个更好的方法吗 orgSlice int 1 2 3 newSlice int newInt 2 newSlice a
  • Webpack babel es6 给我错误,react-router 1.0“找不到模块”?

    我在使用react router时遇到以下错误 它所引用的错误看起来像是在我的应用程序代码之外 但在react router库本身中 ERROR in react router lib Router js Module not found
  • 在Android中查找包含View的Window

    我找不到获得参考的方法Window包含任意Viewv 我发现获取窗口令牌 http developer android com reference android view View html getWindowToken 但我不知道如何使
  • Android BottomNavigationView 与闪屏返回堆栈问题

    所以我设置了我的BottomNavigationView like here https youtu be Covu3fPA1nQ 使用导航组件库 一切正常 每个选项卡都可以保留其后堆栈 但是 如果我添加一个启动屏幕 Fragment an
  • 如何管理应用程序工厂模式中的额外模块?

    我正在使用带有应用程序工厂模式的烧瓶 我确实知道应用程序工厂模式仅在工厂函数中管理配置对象 如下面的代码所示 def create app config app config from object config sentry init a
  • 无法在 Desktop 中为 Compose 设计 UI 布局

    我正在为基于的应用程序开发 UI 布局为桌面撰写 https www jetbrains com lp compose mpp 它由几个复选框组成 但里面没有任何功能为桌面撰写 https github com JetBrains comp
  • JavaScript:使用递归检查数字是否为素数

    我对如何解决这个问题有点困惑 我需要所有素数才能返回 true 如果不返回 false 我看到我的逻辑包括 2 并且返回 0 所以它自动返回 false 因为 2 余数为 0 function isPrime num div 2 BASE
  • 如何在 Azure DevOps 中创建面板?

    我遇到了这个问题并解决了它 所以这里有这个问答 以防万一其他人花时间筛选 Microsoft 文档试图找到这个答案 如何在 Azure DevOps 中创建新板 当我转到 板 gt 板 并查看现有板时 没有像板列表下拉列表中的存储库那样可以
  • MS Access 对具有多个联接的链接表的查询非常慢

    我有一个 MySQL 数据库和一个 MS Access 前端 MySQL 数据库表通过 ODBC 连接链接到 MS Access 如果 WHERE 或 HAVING 子句中有任何内容 任何具有多个连接表的查询都会运行得非常慢 例如 SELE
  • Apple Watch 设置背景图片

    如何以编程方式设置 WatchKit 应用程序背景图像 我需要在代码中设置它 因为它会根据变量大小而变化 并且我们需要在图像上放置标签 这是不可能的以编程方式将背景图像设置在整个手表应用页面在 WatchKit 中 整个页面的背景图像当前只
  • 在 Markdown 中更改美人鱼主题

    除了代码之外 我在 Markdown 文档中使用 mermaid 进行基本图表渲染 我发现这个在线编辑器 https mermaidjs github io mermaid live editor 在预览时对其进行编辑很有用 这建议更改主题
  • 计算java中两个日期之间的月份[重复]

    这个问题在这里已经有答案了 我需要计算两个日期之间的月份 如果 startDate 2013 01 01 endDate 2013 01 31 答案应该是 1 startDate 2013 01 01 endDate 2013 02 01
  • Rails:虚拟属性和表单值

    我有一本带有虚拟属性的模型书 用于从书籍表单创建编辑器 代码如下 class Book lt ActiveRecord Base has many book under tags has many tags through gt book