ruby-on-rails - Rails:在rails服务器中加载部分对象但不渲染
问题描述
我正在尝试在show.html.erb
文件中为一个名为“团队”的对象渲染一个名为“标志”的对象的部分内容。但是,不会渲染团队的分配和升起标志的部分。
我遇到了问题,因为这是一个复杂的关联。一面旗帜可以由一个团队升起,但分配给另一个团队。这是通过使用 aassignedto_id
和 a来引用的raisedby_id
。这些 ID 是team_id
在创建标志对象时使用的。两者都是belongs_to 关联。然后,一个团队可以向他们举起许多旗帜,并为他们分配许多旗帜。我希望展示分配给团队的旗帜。
我怎样才能得到这个渲染?是否必须将任何内容添加到teams_controller.rb
文件中?
请看下面的代码。
标志.rb
class Flag < ApplicationRecord
belongs_to :raisedby, :class_name => 'Team'
belongs_to :assignedto, :class_name => 'Team'
belongs_to :user
enum priority: [:high, :medium, :low]
enum status: [:raised, :open, :closed, :cancelled]
validate :check_assigned_and_raised
def check_assigned_and_raised
errors.add(:assignedto_id, " error has occurred. The assigned team can not be the same as team who is raising the flag.") if assignedto_id == raisedby_id
end
end
团队.rb
class Team < ApplicationRecord
has_many :users
has_many :assignedFlags, -> {where 'assignedto_id = "team_id"'}, :class_name => 'Flag', :foreign_key => 'assignedto_id'
has_many :raisedFlags, -> {where 'raisedby_id = "team_id"'}, :class_name => 'Flag', :foreign_key => 'raisedby_id'
end
团队/show.html.erb
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<br>
<%= @team.name %>
</p>
<p>
<br>
<strong>Description:</strong>
<br>
<%= @team.description %>
</p>
<br>
<strong>Users:</strong>
<p>
<% @team.users.each do |user| %>
<%= render partial: 'users/user', locals: { user: user } %>
<% end %>
</p>
<br>
<strong>Assigned Flags:</strong>
<p>
<% @team.assignedFlags.each do |flag| %>
<%= render partial: 'flags/flag', locals: { flag: flag } %>
<% end %>
</p>
<br>
<strong>Raised Flags:</strong>
<p>
<% @team.raisedFlags.each do |flag| %>
<%= render partial: 'flags/flag', locals: { flag: flag } %>
<% end %>
</p>
<br>
<%= link_to 'Edit', edit_team_path(@team) %> |
<%= link_to 'Back', teams_path %>
_flags.html.erb
<div>
<p>
<strong>Title:</strong>
<%= @flag.title %>
</p>
<p>
<strong>Description:</strong>
<%= @flag.description %>
</p>
<p>
<strong>Priority:</strong>
<%= @flag.priority %>
</p>
<p>
<strong>Status:</strong>
<%= @flag.status %>
</p>
<p>
<strong>Raisedby:</strong>
<%= @flag.raisedby.name %>
</p>
<p>
<strong>Assignedto:</strong>
<%= @flag.assignedto.name %>
</p>
<p>
<strong>Created By:</strong>
<%= @flag.user.name if @flag.user %>
<%= @flag.user.surname if @flag.user %>
</p>
<%= link_to 'Edit', edit_flag_path(@flag) %> |
<%= link_to 'Back', flags_path %>
</div>
Rails 服务器结果
Team Load (0.4ms) SELECT "teams".* FROM "teams" WHERE "teams"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
Rendering teams/show.html.erb within layouts/application
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."team_id" = ? [["team_id", 1]]
Rendered users/_user.html.erb (0.7ms)
Rendered users/_user.html.erb (0.1ms)
Flag Load (0.5ms) SELECT "flags".* FROM "flags" WHERE "flags"."assignedto_id" = ? AND (assignedto_id = "team_id") [["assignedto_id", 1]]
Flag Load (0.3ms) SELECT "flags".* FROM "flags" WHERE "flags"."raisedby_id" = ? AND (raisedby_id = "team_id") [["raisedby_id", 1]]
Rendered teams/show.html.erb within layouts/application (12.3ms)
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]]
Completed 200 OK in 138ms (Views: 129.8ms | ActiveRecord: 2.0ms)
解决方案
它没有显示,因为您需要使用flag
而不是@flag,还优化了您的代码,请检查
<p>
<strong>Title:</strong>
<%= flag.title %>
</p>
<p>
<strong>Description:</strong>
<%= flag.description %>
</p>
<p>
<strong>Priority:</strong>
<%= flag.priority %>
</p>
<p>
<strong>Status:</strong>
<%= flag.status %>
</p>
<p>
<strong>Raisedby:</strong>
<%= flag.raisedby.name %>
</p>
<p>
<strong>Assignedto:</strong>
<%= flag.assignedto.name %>
</p>
<p>
<strong>Created By:</strong>
<%= flag.user&.name %>
<%= flag.user&.surname %>
</p>
<%= link_to 'Edit', edit_flag_path(flag) %> |
<%= link_to 'Back', flags_path %>
</div>
推荐阅读
- python - 将任何字符串转换为整数
- c++ - C++ 定义自定义 unordered_set 的不同方法
- node.js - 纱线安装在离线模式下挂起
- python - Numpy 返回 .00...002
- docker - Angular 6 + Nginx + Docker + Kubernetes:如何为不同环境配置环境变量
- node.js - Dialogflow 所需参数
- .net - RabbitMq .net 核心的类似描述
- javascript - 我们可以通过 JSON Key 找到并设置值吗?
- sapui5 - sap.ui.table.Table - 按内容以编程方式选择行
- assembly - 具有两个递归函数的二元炸弹阶段 4