Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 RubyonRails访问列从属于表_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 RubyonRails访问列从属于表

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

我正在开发一个CRUD,我有三个表客户,审计案例和风险案例

以下是我的模型之间的关系

    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>