gpt4 book ai didi

ruby-on-rails - ruby rails : Exclude Elements from Arrray

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:30 25 4
gpt4 key购买 nike

我是初学者,所以以下大部分内容可能不正确/不是最优的,但到目前为止它有效!我正在学习,但我不知道该怎么做的一件事是:

我有一组图像。这些是@fsets。我想在 3 个字段中显示该集中的一张图像,但要确保没有重复的图像。因此,如果我有一个 [image1, image2, image3, image4] 数组,用户可以选择 image2 并让它与从剩余图像中选择的另外 2 个一起显示。在我的 Controller 中,我有:

  def rotator
@fset = Fset.find(params[:id])
@image = Exemplar.find(params[:image])
@setdistractora = @fset.line_items.sample
@setdistractorb = @fset.line_items.sample
end

第一行根据 url 中的 :id 找到集合。第二个根据 url 中传递的 :image 参数找到所选图像。第三行和第四行从与其他两张图像相同的集合中随机取两张图像。

这是我为了开始做事而首先写的,但我确信有更好的方法来做事。为了尝试解决我尝试过的无重复图像问题:

 @remainingset = @fset - @image
@setdistractora = @fset.line_items.sample
@setdistractorb = @fset.line_items.sample

那行不通...所以我试过了

 @remainingset = [@fset] - [@image] 

它返回一个数组,但我不能使用 line_items 关联来调用图像。

有人可以帮忙吗?谢谢!

****** 编辑 1 ******

添加关系

class Exemplar < ActiveRecord::Base
mount_uploader :image, ImageUploader
has_many :line_items
has_many :fsets, through: :line_items

class Fset < ActiveRecord::Base
has_many :line_items, dependent: :destroy

class LineItem < ActiveRecord::Base
belongs_to :fset
belongs_to :exemplar

****** 编辑 2 ******

嗯...我解决了我的问题,尽管可能有更好的方法。这是我所做的更改。

我通过以下方式向 Fset 类添加了一个 has_many:

 class Fset < ActiveRecord::Base  
has_many :line_items, dependent: :destroy
has_many :exemplars, through: :line_items

这清理了我的很多 View 并使它们更具可读性,还允许我在 Controller 中执行此操作:

@fset = Fset.find(params[:id])    
@image = Exemplar.find(params[:image])
@subset = @fset.exemplars - [@image]
@setdistractora = @subset.sample
@subsetb = @subset - [@setdistractora]
@setdistractorb = @subsetb.sample

所以现在在我看来:

<div class="rotate">            
<%= image_tag @image.image_url(:thumb) %>
</div>

<div class="rotate">
<%= image_tag @setdistractora.image_url(:thumb) %>
</div>

<div class="rotate">
<%= image_tag @setdistractorb.image_url(:thumb) %>
</div>

因此每张图片现在都是独一无二且随机的。感谢您的以下回复,因为它们帮助我思考可以去哪里解决这个问题。

最佳答案

@fset 是一个数组,对吗?

你可以这样从数组中减去数组:

[4,3,2,1] - [2] # -> [4,3,1]

所以应该是:

@remainingset = @fset - [@image] 

关于ruby-on-rails - ruby rails : Exclude Elements from Arrray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28350996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com