在一个视图中对多个实例变量使用if语句 - Rails

时间:2013-05-27 07:49:15

标签: ruby-on-rails

我正在构建一个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?确认实例变量本身存在,但我希望能够在下一级别进行条件检查 - 实例变量中的字段。

2 个答案:

答案 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 %>

它将在循环内..