gpt4 book ai didi

ruby-on-rails - 跨 belongs_to/has_many 关系访问 Rails 模型信息?

转载 作者:行者123 更新时间:2023-12-04 02:21:46 25 4
gpt4 key购买 nike

我一直在查看 rails 文档,但遇到了一个问题,即尝试访问 has_many/belongs_to 关系中的数据。我有 3 个数据模型,如下所示:

class Cuisine < ActiveRecord::Base
has_many :providers
validates :name, presence: true, uniqueness: true
end

class Provider < ActiveRecord::Base
belongs_to :cuisine
has_many :lunches
validates :name, presence: true, uniqueness: true
validates :cuisine, presence: true
end

class Lunch < ActiveRecord::Base
belongs_to :provider
default_scope -> { order('created_at DESC') }
validates :date, presence: true, uniqueness: true

end

我的主要问题是 - 如何显示与提供者关联的午餐模型中的数据? IE。提供者的 show.html.erb 中的 provider.lunches.lunchscore?

有关更多上下文,这是我的 providers_controller.rb:
  def show
@provider = Provider.find(params[:id])
@lunches = @provider.lunches
@cuisine = @provider.cuisine
end

我正在为提供者 View 编辑 show.html.erb,并且我正在寻找显示与提供者相关的数据。

遵循 railstutorial.org 的教程我包括了一个基于(我相信)一个集合的部分。所以,views/providers/show.html.erb 有这样的布局:
<% if @provider.lunches.any? %>
<h3> Total Lunches - (<%= @provider.lunches.count %>) </h3>
<%= render @lunches %>
<br>
<% end %>

@lunches 变量(我认为它是一个集合?)然后加载位于 apps/views/lunches/_lunch.html.erb 中的 _lunch.html.erb 部分,其中包含以下内容:
<ul>
<span class="date-score"><%= number_to_percentage(lunch.lunchscore * 100, precision: 0) %> </span>
<span class="date-list"> <%= link_to lunch.date.strftime("%A %B %e, %G"), lunch_path(lunch.id) %> - <%= link_to @provider.name, lunch_path(lunch.id) %> Likes <%= lunch.liked %> </span>

</ul>

这实际上效果很好 - 直到我想在 if 语句之外(以及完全在部分之外)加载数据并将其直接包含在 app/views/providers/show.html.erb 中。例如,午餐模型具有以下属性:
:date, :liked, :disliked, :enough, :not_enough, :provider_id

我的问题:如果我不想通过部分中的 if 语句迭代和打印每个值,如何从 providers/show.html.erb 模型中访问和聚合属性?

如果我尝试一些基本的东西,比如在提供程序 show.html.erb 文件中包含这个,我会出错:
<%= @provider.lunches.lunchscore.average %>

谢谢你的帮助。如果我使用了错误的命名法(即数据模型属性或哈希作为集合),我深表歉意,我只是在学习,也是 Stack Exchange 的新手。随时纠正我。

最佳答案

您在 Controller 中设置的以@ 开头的变量称为实例变量,并且在您的 View 中可用。
@provider = Provider.find(params[:id])返回单个记录
@lunches = @provider.lunches返回 ActiveRecord::Relation

当您调用 @provider.lunches.lunchscore ,您正在调用要在单个午餐记录上调用的实例方法,但现在您正在处理午餐记录的关系。

例如,要选择单个午餐记录,您可以遍历午餐

@lunches.each do |lunch|
lunch.lunchscore
end

或者您只能选择关系中的第一条记录
@lunches.first.lunchscore

我希望这可以澄清记录和关系之间的区别。

关于ruby-on-rails - 跨 belongs_to/has_many 关系访问 Rails 模型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184305/

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