我正在构建一个rails应用程序,其中用户模型与其他模型有几个has_many关系。
class User < ActiveRecord::Base
has_many :model_2s
has_many :model_3s
has_many :model_4s
end
然后我创建了一个配置文件页面,我在其中显示当前用户的每个模型的数据。我这样做是使用一个单独的控制器 - profiles_controller.rb
在配置文件控制器中,我根据当前用户为每个模型创建实例变量:
class ProfilesController < ApplicationController
@user = User.find(params[:id])
@model_2s = @user.model_2s.all
@model_3s = @user.model_3s.all
@model_4s = @user.model_4s.all
end
然后,我可以在配置文件的show视图中显示这些实例变量的数据。我通过调用每个方法来做到这一点。
我现在尝试添加的功能是为用户尚未填写的字段显示一些默认数据(如Lorem Ipsum占位符文本)。
我的问题是我无法弄清楚如何检查这些实例变量中的特定字段是否为空。
例如,我想要的是:
<% if @model_2s.field_1.empty? %>
<p>Lorem Ipsum</p>
<% else %>
<%= @model_2s.field_1 %>
<% end %>
然而,这会产生“未定义的方法'field_1'...”错误。
我知道如何检查@ model_2s.any?确认实例变量本身存在,但我希望能够在下一级别进行条件检查 - 实例变量中的字段。
答案 0 :(得分:1)
不确定您在视图中执行的操作,但如果您想要访问field_1
<% @model_2s.each do |m| %>
<% if m.field_1.empty? %>
<p>Lorem Ipsum</p>
<% else %>
<%= m.field_1 %>
<% end %>
<% end %>
这也处理@model_2s
为空的情况。
答案 1 :(得分:0)
试试这种方式
<% if @model_2s %>
<% @model_2s.each do |model_2| %>
<% if model_2.field_1.empty? %>
<p>Lorem Ipsum</p>
<% else %>
<%= model_2.field_1 %>
<% end %>
<% end %>
<% end %>
它将在循环内..