Направляющие проверяют если урожай: область определяется в content_for

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
93
задан wintermeyer 10 March 2016 в 15:14
поделиться

5 ответов

@content_for_whatever устарел. Используйте вместо него content_for? , например:

<% if content_for?(:whatever) %>
  <div><%= yield(:whatever) %></div>
<% end %>
210
ответ дан 24 November 2019 в 06:14
поделиться

Может создать помощника:

def content_defined?(var)
  content_var_name="@content_for_#{var}"    
  !instance_variable_get(content_var_name).nil?
end

И использование это в Вашем расположении:

<% if content_defined?(:an__area) %>
  <h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
2
ответ дан Nick 24 November 2019 в 06:14
поделиться

Хорошо я собираюсь бесстыдно сделать сам ответ, поскольку никто не ответил, и я уже нашел ответ:) Определяют это как вспомогательный метод или в application_helper.rb, или где угодно Вы нашли удобным.

  def content_defined?(symbol)
    content_var_name="@content_for_" + 
      if symbol.kind_of? Symbol 
        symbol.to_s
      elsif symbol.kind_of? String
        symbol
      else
        raise "Parameter symbol must be string or symbol"
      end

    !instance_variable_get(content_var_name).nil?

  end
1
ответ дан William Yeung 24 November 2019 в 06:14
поделиться

не действительно необходимый для создания вспомогательного метода:

<% if @content_for_sidebar %>
  <div id="sidebar">
    <%= yield :sidebar %>
  </div>
<% end %>

тогда, конечно, в Вашем представлении:

<% content_for :sidebar do %>
  ...
<% end %>

я использую это все время для условного движения между расположением на два столбца и на один столбец

10
ответ дан efalcao 24 November 2019 в 06:14
поделиться

Я не уверен в последствиях для производительности двойного вызова yield, но это будет происходить независимо от внутренней реализации yield (@content_for_xyz устарело) и без дополнительного кода или вспомогательных методов:

<% if yield :sidebar %>
  <div id="sidebar">
    <%= yield :sidebar %>
  </div>
<% end %>
1
ответ дан 24 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: