我正在构建一个市场应用程序,因此卖家可以列出要出售的商品。我试图通过卖家下载CSV,以便卖家可以下载自己的商家信息。
我正在关注此railscast中的代码。我得到了railscasts代码按原样工作。它将我模型中的所有数据下载到csv中。但是,当我向查询添加卖方过滤器时,它不会应用过滤器。
在listing_controller中:
def index
@listings = Listing.not_expired.order("created_at DESC")
respond_to do |format|
format.html
format.csv { send_data @listings.to_csv }
end
end
def seller
@listings = Listing.where(user: current_user).order("created_at DESC")
respond_to do |format|
format.html
format.csv { send_data @listings.seller_csv }
end
end
在listing.rb中:
def self.to_csv
CSV.generate do |csv|
csv << column_names
all.each do |listing|
csv << listing.attributes.values_at(*column_names)
end
end
end
def self.seller_csv
CSV.generate do |csv|
csv << column_names
where(user: current_user).each do |listing|
csv << listing.attributes.values_at(*column_names)
end
end
end
to_csv方法运行正常并下载所有列表。但seller_csv方法也会下载所有列表。我需要它来过滤current_user。我错过了什么?
答案 0 :(得分:2)
让您的函数将列表列表作为参数。
def self.to_csv(listings)
CSV.generate do |csv|
csv << column_names
listings.each do |listing|
csv << listing.attributes.values_at(*column_names)
end
end
end
然后你可以在两个场景中重复使用相同的功能
def index
@listings = Listing.not_expired.order("created_at DESC")
respond_to do |format|
format.html
format.csv { send_data Listing.to_csv(@listings) }
end
end
def seller
@listings = Listing.where(user: current_user).order("created_at DESC")
respond_to do |format|
format.html
format.csv { send_data Listing.to_csv(@listings) }
end
end
您的代码没有真正意义,因为您在控制器中获取列表但从未重新使用这些获取的对象,并且在模型的静态函数中重新调用DB。