在 ActiveRecord(CakePHP 风格)设置中,我在视频和 Bins 上设置了 HasAndBelongsToMany 关联设置:Bin 可以存储对视频的 n 引用,并且视频可以属于 n 垃圾箱。
我需要能够手动设置和存储视频在特定 Bin 中的显示顺序(以便客户可以在 Bin 中以特定顺序显示他的视频。)我最初的想法是在 Bin 中创建一个字段它按照视频 ID 需要出现的顺序存储一组视频 ID。这是处理此问题的最有效方法吗?
如果是这样,当我获得 HABTM 查询结果时,重新排序返回的查询以匹配排序后的 ID 数组的最干净/最有效的方法是什么?
与 Bin 关联的视频作为数组返回:
[Video] => Array
(
[0] => Array
(
[id] => 49b2de95-0338-48b9-bc88-01ba35664358
...
)
[1] => Array
(
[id] => 49b1ccad-b770-410e-be46-03a035664358
...
)
或者有没有更好的方法可以在不使用 HABTM 关联的情况下实现我想要做的事情?
提前致谢-
最佳答案
HABTM复杂了怎么办?
默认情况下,在保存 HasAndBelongsToMany 关系时,Cake 会在保存新行之前删除连接表中的所有行。例如,如果您有一个关联了 10 个 child 的俱乐部。然后,您用 2 个 child 更新俱乐部。俱乐部将只有 2 个 child ,而不是 12 个。
另请注意,如果您想向连接添加更多字段(创建时或元信息),这可以使用 HABTM 连接表,但重要的是要了解您有一个简单的选择。
两个模型之间的 HasAndBelongsToMany 实际上是通过 hasMany 和 belongsTo 关联关联的三个模型的简写。
考虑这个例子:
Child hasAndBelongsToMany Club
另一种看待这个问题的方法是添加成员(member)模型
Child hasMany Membership
Membership belongsTo Child,
ClubClub hasMany Membership.
这两个例子几乎完全一样。他们在数据库中使用相同数量和命名的字段以及相同数量的模型。重要的区别是“加入”模型的命名不同,而且它的行为更可预测。
在您的示例中,您需要一种无需编辑其他用户即可添加和删除视频链接的方法,因此标准 habtm 不太适合您。为此“加入”创建一个类似于上述成员资格模型的模型。此外,如果您添加了权重字段,则可以使用 ordered behavior (我写的)为每个箱子订购每组视频。然后您将使用以下字段
id, bin_id, video_id, weight
并在行为配置中将 bin_id 设置为 'foreign_key'。祝你好运
关于php - 存储 HABTM 协会中持有的项目的排序顺序 - CakePHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/936203/
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我发现自己需要这个。假设cart是一个包含用户列表的模型。defindex_of_itemcart.users.each_with_indexdo|u,i|ifu==current_userreturniendend获取此类关联索引的更简单方法是什么? 最佳答案 indexArray上的方法与您的index_of_item方法相同,例如cart.users.index(current_user)返回数组中第一个对象的索引==给obj。如果未找到匹配项,则返回nil。 关于ruby-on-