Ruby on rails 4 RubyonRails访问列从属于表
我正在开发一个CRUD,我有三个表客户,审计案例和风险案例 以下是我的模型之间的关系Ruby on rails 4 RubyonRails访问列从属于表,ruby-on-rails-4,Ruby On Rails 4,我正在开发一个CRUD,我有三个表客户,审计案例和风险案例 以下是我的模型之间的关系 class Client < ActiveRecord::Base has_many :audit_cases end class AuditCase < ActiveRecord::Base belongs_to :client has_many :ra_cases
class Client < ActiveRecord::Base
has_many :audit_cases
end
class AuditCase < ActiveRecord::Base
belongs_to :client
has_many :ra_cases
end
class RaCase < ActiveRecord::Base
belongs_to :audit_case
end
我正在尝试连接这三个表并在视图中显示
以下脚本成功运行
<tbody>
<% @b_cases.each do |b_case| %>
<tr>
<td><%= b_case.audit_case.client.Client_name %></td>
</tr>
<% end %>
</tbody>
但是下面的脚本有一个错误,即nil的未定义方法“Client_name”:NilClass
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.Client_name %></td>
</tr>
<% end %>
</tbody>
如果我使用
<%= a_case.client %>
我想知道如果我想从孩子(审计案例)而不是孙子(ra_案例)中提取家长的数据,我如何修改脚本
多谢各位 由于“client.client_name”列中的某些内容为零,
在我添加以下代码“除非a_case.client.nil?”
由于“client.client\u name”列中的某些内容为零,
在我添加以下代码“除非a_case.client.nil?”
看起来并不是每个关系都是必需的,因此数据库中可能有一些
AuditCase
记录没有与之关联的客户端
记录(或者客户端记录已被销毁)。这样做的结果是,视图将引发错误,因为它试图调用nil
上的方法
为了让视图正常工作,我会以某种方式对其进行零保护。如果您想围绕客户案例关系强制执行一项要求,那是另一个问题
以下是一些可能的零防护想法:
# If you're using Ruby 2.3+, you can use the Safe Navigation Operator
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client&.Client_name %></td>
</tr>
<% end %>
</tbody>
# Rails also provides a #try method
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.try(:Client_name) %></td>
</tr>
<% end %>
</tbody>
# or just a rough nil check
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.Client_name if a_case.client %></td>
</tr>
<% end %>
</tbody>
#如果您使用的是Ruby 2.3+,则可以使用安全导航操作符
#Rails还提供了一种#try方法
#或者只是一张粗略的零分支票
让我知道这是否有效
从ruby风格的角度来看,我会避免使用像
Client\u name
这样的方法。大写在ruby中定义了一个常量/类。看起来并不是每个关系都是必需的,因此数据库中可能有一些AuditCase
记录没有与之关联的客户端
记录(或者客户端记录已被销毁)。这样做的结果是,视图将引发错误,因为它试图调用nil
上的方法
为了让视图正常工作,我会以某种方式对其进行零保护。如果您想围绕客户案例关系强制执行一项要求,那是另一个问题
以下是一些可能的零防护想法:
# If you're using Ruby 2.3+, you can use the Safe Navigation Operator
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client&.Client_name %></td>
</tr>
<% end %>
</tbody>
# Rails also provides a #try method
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.try(:Client_name) %></td>
</tr>
<% end %>
</tbody>
# or just a rough nil check
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.Client_name if a_case.client %></td>
</tr>
<% end %>
</tbody>
#如果您使用的是Ruby 2.3+,则可以使用安全导航操作符
#Rails还提供了一种#try方法
#或者只是一张粗略的零分支票
让我知道这是否有效
从ruby风格的角度来看,我会避免使用像Client\u name
这样的方法。大写在ruby中定义了一个常量/类
# If you're using Ruby 2.3+, you can use the Safe Navigation Operator
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client&.Client_name %></td>
</tr>
<% end %>
</tbody>
# Rails also provides a #try method
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.try(:Client_name) %></td>
</tr>
<% end %>
</tbody>
# or just a rough nil check
<tbody>
<% @a_cases.each do |a_case| %>
<tr>
<td><%= a_case.client.Client_name if a_case.client %></td>
</tr>
<% end %>
</tbody>