gpt4 book ai didi

ruby-on-rails - 我怎样才能折叠这个非常重复的 Ruby/Rails 代码?

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:05 27 4
gpt4 key购买 nike

我有两个小的结构性问题,我不确定如何处理,因为我是 RoR 的相对新手。

第一个问题:在我的一个观点中,我的代码如下所示:

<ul style="list-style-type: circle">
<li><%= @apples.size %> apples</li>
<li><%= @oranges.size %> oranges</li>
<li><%= @bananas.size %> bananas</li>
<li><%= @grapefruits.size %> grapefruits</li>
</ul>

是否可以对此进行重构,以便我只需要在一些不同种类的水果列表上迭代一次,并获得适当的 <li>是自动生成的吗? 编辑:我忘了添加 @apples , @oranges等,可能是 nil .有惯用的方法来处理吗?

第二个问题:在我的 Controller 中,我的代码如下所示:

@apples = Apple.find(:all)
@apples.each { |apple| apple.do_stuff(:xyz) }

@bananas = Banana.find(:all)
@bananas.each = { |banana| banana.do_stuff(:xyz) }

# ... &c

如您所见,以完全相同的方式多次调用相同的操作。有没有办法将其缩短为类似 [Apple.find(:all), ...].each { |fruit| ... } 的内容?而有那个工作吗?

非常感谢您的帮助!

最佳答案

我会在助手中执行此操作

def fruit_size(fruit)
list = @fruits[fruit]
return if list.empty?

content_tag(:li, "#{list.size} #{fruit}")
end

在 View 中:

<% ["apples", "oranges", "bananas", .....].each do |fruit| %>
<%= fruit_size(fruit)
<% end %>

在你的 Controller 中:

@fruits = {}
["apples", "oranges", "bananas", ......].each do |fruit|
@fruits[fruit] = fruit.classify.constantize.find(:all).each {|record|
record.whatever_here
end
end

@fruits 将所有项目存储在哈希中是有意义的,这样您就不必使用 instance_variable_get 和东西。

也许您还想在某处定义该数组,这样您就不必在 Controller 和 View 中重复它。假设您有一个水果模型。

class Fruit < ActiveRecord::Base
FRUITS = ["apples", "oranges", "bananas", ....]
end

然后,在 View 和 Controller 中使用 Fruit::FRUITS。

关于ruby-on-rails - 我怎样才能折叠这个非常重复的 Ruby/Rails 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786390/

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