具有嵌套属性的 Best_In_Place 内联编辑

2024-04-01

我目前正在尝试使用 best_in_place gem 来在 HTML 表中进行内联编辑。我正在购物车的显示视图中显示购物车。在购物车的显示视图中,我可以添加订单项。创建 LineItem 时,还会创建一个带有 lineItem_id 的新可用记录,然后将其及其 lineitem 显示在购物车中。 Cart 和 LineItem 表都来自外部数据库,因此,我无法添加列,这就是为什么我不能只向 LineItem 添加可用的布尔属性。

**cart.rb
class Cart << AR::Base
 has many LineItems
end

**line_item.rb
class LineItems <<AR::Base
 belongs_to Cart
 has_one :available 
 accepts_nested_attributes_for :available 
end

**available.rb
class Available<<AR::Base
 belongs_to LineItems
end


**views/cart/show.html.erb
@cart.lineitems.each do |line_items|
    <td><%= line_item.price %></td>
    <td><%=line_item.name %></td>
    <td><%= best_in_place line_item.available.boolean, :boolean, :path => line_items_path, :type =>  type: :checkbox, collection: %w[No Yes] %></td>  
end

我希望能够使用 best_in_place 编辑购物车显示视图上的 html 表中的 line_item.available.boolean 但我没有任何运气..任何帮助都会很棒! =] 我在阅读后知道不可能使用嵌套属性,但是如果我可以以某种方式摆脱可用模型并在显示表中有一个字段,我可以编辑 line_item 来查看 lineItem 是否可用,那也太好了。我对任何想法持开放态度!


首先,我们需要修复代码中的一些语法问题:

@cart.lineitems.each do |line_item| # changed "line_items" to "line_item"
  <td><%= line_item.price %></td>
  <td><%=line_item.name %></td>
  <td><%= best_in_place line_item.available, :boolean, :path => line_items_path, type: :checkbox, collection: %w[No Yes] %></td>  # changed "line_item.available.boolean" to "line_item.available" and ":type =>  type: :checkbox" to "type: :checkbox"
end

现在,答案是:

正如我所解释的这个 Github 问题 https://github.com/bernat/best_in_place/issues/51#issuecomment-99951342,你需要通过一个param选项和一个url选项(以前是path但这在 v3.0.0 中已被弃用)为 best_in_place。

The url option

默认 url 是 best_in_place 第一个参数的更新操作。由于您的代码开头为best_in_place line_item.available,这将默认为url_for(line_item.available.id)。但是,您希望它修补 LineItemsController 的更新操作,即url_for(line_item)

The param option

默认情况下,param 选项假定您正在 PATCH'ing 到 availablescontroller,因此以下是 Rails 约定所需的参数,以便将 available.boolean 更新为值“1”:

{"available"=>{"boolean"=>"1"}}

可用的 ID 已在 URL 中,因此您需要传递的唯一额外参数是新值boolean.

然而,在您的情况下,您正在修补 LineItemsController 并且可用模型接受嵌套属性。这需要两个调整:

  1. LineItem 的 ID 已在 URL 中,但 available 的 ID 不在 URL 中。这里我们有两个选择:要么将Available的ID放入param选项中,要么通过传递使ID变得不必要update_only: true to accepts_nested_attributes在模型中。这update_only根据您的用例,该方法可能不适合您,但我发现它在绝大多数情况下是最简单的方法,并且免费添加了额外的安全层。

  2. 布尔选项需要正确嵌套,即:

    line_items[available_attributes][boolean]
    

    这样,当它到达服务器时,参数将是:

    {"line_item"=>{"available_attributes"=>{"id"=>"99","boolean"=>"1"}}}
    # "99" is just an example of line_item.available.id
    

    请注意,您需要在控制器中允许这些属性,即:

    line_item.update(params.require(:line_item).permit(
      available_attributes: [:id, :boolean]))
    # You can remove `:id` if you are using the `update_only` option
    

将它们放在一起,这是您的 best_in_place 方法:

best_in_place line_item.available, :boolean, 
  type: :checkbox, 
  url: line_item_path(line_item.id),
  param: "line_item[available_attributes][id]=#{line_item.available.id}&line_item[available_attributes]"

但是,如果可能的话,请使用update_only option.

# line_item.rb
accepts_nested_attributes_for :available, update_only: true

看看现在变得多么简单:

best_in_place line_item.available, :boolean, 
  type: :checkbox, 
  url: line_item_path(line_item.id),
  # Note: `url: line_item` might also work.
  # If someone can confirm this in a comment, I can update this answer
  param: "line_item[available_attributes]"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有嵌套属性的 Best_In_Place 内联编辑 的相关文章

  • 获取设备中的当前用户ID

    如何使用设备获取控制器中的当前用户 ID 在我的控制器中我有这样的东西 def index me current user c User find me sheets c time sheets end 我收到一条错误消息 无法找到没有 I
  • Rails 注释分段错误

    有一些问题围绕着这个问题 但没有什么真正能满足我的需求 After I bundle install下面列出了我的 Gemfile 我运行annotate并出现以下错误 Users nickcoelius rvm gems ruby 1 8
  • 捆绑安装无法从 https://rubygems.org/ 获取规格

    我正在尝试遵循 Hartl Rails 教程 但在使用捆绑器 gem 时遇到了问题 使用命令 bundle install 或 bundle update 时 我得到以下输出 从中获取源索引https rubygems org https
  • Rails:CSRF 令牌不工作但已设置

    我在 Heroku 上有我的 Rails 3 应用程序 当我发送银行信息时 我得到 WARNING Can t verify CSRF token authenticity但我的 CSRF 令牌已设置 https gist github c
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • Rails 5.1 CORS - 如何为不同环境设置不同来源

    我正在使用带有 Rail 5 1 API 的rack cors gem 根据文档 我有以下初始化程序 配置 初始化器 cors rb module Api Rails application config middleware insert
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • Ruby on Rails:如何使用 TCP 套接字连接 GPS 设备

    ruby 2 3 0p0 2015 12 25 修订版 53290 x86 64 linux 轨道 4 2 4 我正在使用 cloud9 IDE 和 webrick 服务器 我的项目是实时跟踪GPS 我想使用TCP连接与GPS跟踪设备进行通
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • 使用 Ruby aws-sdk 跟踪文件到 S3 的上传进度

    首先 我知道SO中有很多与此类似的问题 在过去的一周里 我读了大部分 如果不是全部 但我仍然无法让这项工作为我工作 我正在开发一个 Ruby on Rails 应用程序 允许用户将 mp3 文件上传到 Amazon S3 上传本身工作正常
  • 即使在急切加载之后,belongs_to 关联也会单独加载

    我有以下关联 class Picture lt ActiveRecord Base belongs to user end class User lt ActiveRecord Base has many pictures end 在我的
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分

    使用 AJAX 动态渲染页面以响应提交的表单似乎很常见 其他类似的问题都没有集中于如何以一般方式做到这一点 我能找到的关于这个主题的最好的博客文章在这里 http www gotealeaf com blog the detailed gu
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 资产管道:仅对一个控制器使用 javascript 文件

    在 Ruby on Rails v4 中 我希望仅为特定控制器加载一个 js 文件 或一组 js 文件 执行此操作的标准方法是什么 在 application js 中有 require tree 线 我假设这需要删除 所以我并不总是加载每
  • 将rails_admin 与rails_api 结合使用

    我最初将此发布为Rails api GitHub 上的问题 https github com sferik rails admin issues 2617 但由于不活跃 我现在将其发布在这里 我正在尝试使用rails admin使用 Rai
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • Ruby on Rails 服务器在 HTTPS POST 请求期间崩溃

    我正在尝试与你沟通城市飞艇API http urbanairship com docs push html broadcast使用 ROR Web 应用程序 在我的控制器中 我有以下代码 require net http require n
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project

随机推荐

  • Android 滚动时如何在 RecyclerView 中加载更多数据

    我想为一个网站开发android应用程序 我阅读了以下网站的帖子json并显示其在RecyclerView每 10 个帖子以及当用户滚动时RecyclerView显示更多 10 条帖子并结束 我是业余爱好者 我写了下面的代码 但我不知道滚动
  • 如何在 blob 中计算情感分析

    我使用以下方法计算 200 个短句子的情绪 我没有使用训练数据集 for sentence in textblob sentences print sentence sentiment 分析返回两个值 极性和主观性 根据我在网上读到的内容
  • Google 文本转语音 API 音调调整

    如何在此代码中将音调调整为 1 20 from google cloud import texttospeech def text to wav voice name text language code join voice name s
  • 单击带有最新更新的 EditText 时应用程序崩溃(gradle 4.4 - android studio 3.1)

    我最近将我的 android studio 更新到版本 3 1 并将我的 gradle 更新到版本 4 4 从那时起 我一直面临着应用程序在点击某个按钮时进入 ANR 的问题EditText这应该会弹出一个软输入键盘 单击EditText我
  • Ajax 调用不会更新我的行

    我想用字符的 id 更新我的数据库 但是当我将它们放入插槽中时 它不会更新我想要更新的行 我的问题是 你能为我指明如何正确编码或修复我的错误的正确方向吗 function updateTeam var team slot if input
  • 在.Net 中使用 Scala 有什么好处?

    Scala 是一种特殊的编程语言 因为它同时针对 JVM 和 CLR 但有什么好处呢 是否值得将其视为 F 语言的可行替代方案 NET 上的 Scala 是 Miguel Garcia 领导的一项持续努力 最新状态是我们几乎能够在 NET
  • While 循环重置 Bash 脚本中的数字变量[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个简单的 bash 脚本来在一组文件夹中的每个文件中执行某些操作 我还喜欢计算脚本读取了多少个文件 但是当脚本通过循环时 数值变量会被重置 我正在使用的代码是这样的 bin bash let AU
  • 有没有办法获取给定的classes.dex 文件中的类名?

    我正在构建一个家庭自动化应用程序 我正在尝试添加一个插件系统 作为测试 我将测试类 Button 的子类 导出为 APK 文件 并将其放入我的应用程序的文件目录中 我能够创建此类的新实例并将其放入我的视图中使用DexClassLoader
  • 绘制直方图的峰值

    我试图弄清楚如何使用绘制简单直方图的峰值scipy signal find peaks但发现的峰值似乎还很遥远 ages np array 10 5 22 13 50 45 67 30 21 34 60 67 89 45 45 65 his
  • HTTP 是否使用 UDP?

    这可能是一个愚蠢的问题 HTTP 是否使用过用户数据报协议 例如 如果使用 HTTP 传输 MP3 或视频 它内部是否使用 UDP 进行传输 From RFC 2616 http www ietf org rfc rfc2616 txt 通
  • 可以使用数据流将 pubsub 消息重复数据删除回 pubsub 吗?

    我有一个将数据写入 Google Cloud pubsub 的应用程序 根据 pubsub 的文档 由于重试机制而导致的重复偶尔可能会发生 还有消息乱序的问题 这在 pubsub 中也得不到保证 另外 根据文档 可以使用 Google Cl
  • 表设计+SQL问题

    我有一个餐桌食品吧 是使用以下 DDL 创建的 我使用的是mySQL 5 1 x CREATE TABLE foodbar id INT NOT NULL AUTO INCREMENT user id INT NOT NULL weight
  • 动态创建 Laravel Request 对象

    我正在一个控制器中处理数据 并希望将其进一步传递到另一个控制器中以避免重复代码 有没有办法设置另一个控制器中需要的 Request 对象store 方法 我追踪了 Request 继承并找到了 Symfony 的 Request 对象 它有
  • Java事件和事件监听器[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 Google 上搜索以了解如何
  • 证明特定矩阵存在

    我在编程论坛 Ohjelmointiputka 中发现了这个问题 https www ohjelmointiputka net postit tehtava php tunnus ahdruu https www ohjelmointipu
  • Dart:从字符串创建方法

    我一直在尝试使用 Dart 从字符串动态创建方法 但没有成功 字符串示例 String str gt return str length 这个想法是允许用户创建自己的函数来应用于给定的字符串 我发现的唯一的东西是 NoSuchMethod
  • PrintSystemJobInfo.JobStream 是否损坏?

    我从目标打印机获取队列并浏览其上的作业列表 当作业不是 IsSpooling 时 我尝试读取 JobStream 以查看打印作业 到目前为止 JobStream 一直为 null 我的打印内容来自 DOS 应用程序 应该是纯文本 我已经暂停
  • C 中带括号和不带括号的循环处理方式不同吗?

    我在调试器中单步执行一些 C CUDA 代码 如下所示 for uint i threadIdx x i lt 8379 i 256 sum d PartialHistograms blockIdx x i HISTOGRAM64 BIN
  • 当我运行多个测试时,Django LiveServerTestCase 无法加载页面

    我正在尝试在一个 Django LiveServerTestCase 中运行多个测试 当我运行任何单个测试 其他人评论 时 一切都会按预期进行 但是 当我通过两个测试运行测试用例时 第一个测试工作正常 但第二个测试加载带有 内部服务器错误
  • 具有嵌套属性的 Best_In_Place 内联编辑

    我目前正在尝试使用 best in place gem 来在 HTML 表中进行内联编辑 我正在购物车的显示视图中显示购物车 在购物车的显示视图中 我可以添加订单项 创建 LineItem 时 还会创建一个带有 lineItem id 的新