Rails - Использование true и false - PullRequest
3 голосов
/ 18 января 2011

В моем контроллере есть следующее:

if params[:archive] == 'true'
  @archived_new_status = true
else
  @archived_new_status = false
end

Затем в create.je.erb выполните:

<% if !@archived_new_status.nil? %>
   xxx.myfuncthatNeedsTrueOrFalse(<%=@archived_new_status%>);
<% end %>

Это работает только тогда, когда @archived_new_status имеет значение true, когда значение false, которое, кажется, не устанавливается как false. Когда я делаю Rails.logger.info на @archived_new_status для false, он ничего не выводит, если я его проверяю, я получаю false.

Есть мысли?

Ответы [ 6 ]

3 голосов
/ 18 января 2011

Код в контроллере может быть написан:

@archive_new_status = (params[:archive] == 'true')

Просмотр: я не понимаю, почему вы проверяете, является ли переменная ноль;@archive_new_status имеет значение true или false, поэтому просто вызовите код JS (используя to_json для любого имеющегося аргумента):

xxx.myfuncthatNeedsTrueOrFalse(<%= @archived_new_status.to_json %>);
1 голос
/ 18 января 2011

попробовать:

<% if !@archived_new_status.blank? %>
   xxx.myfuncthatNeedsTrueOrFalse(<%=@archived_new_status%>);
<% end %>
0 голосов
/ 19 января 2011

Попробуй это. Я понимаю, что @archived_new_status является логическим значением (true или false)

params[:archive] ? @archived_new_status : !@archived_new_status
0 голосов
/ 18 января 2011

Rails.logger.info false неправильно выводит ничего (см. мой ответ на ваш другой вопрос ), поэтому я думаю, что это скрывает то, чем является ваша настоящая проблема.

ERB <%= something %> неявно вызывает something.to_s, но false.to_s == 'false', поэтому наиболее вероятным объяснением того, что вы видите, является то, что @archived_new_status почему-то вообще не устанавливается или не передается в шаблон представления.

0 голосов
/ 18 января 2011

Правильно ли я понимаю, что как-то не установлена ​​переменная @archived_new_status? Хотя код, который вы показываете, всегда устанавливает его на true или false.

Я бы переписал так:

@archived_new_status = if params[:archive] == 'true'
  true
else
  false
end

То же, что и код выше, только несколько проще (и, возможно, понятнее). Тогда вы могли бы написать это еще короче:

@archived_new_status = params[:archive] == 'true' ? true : false

(на самом деле это полностью идентично тому, что вы показали нам). По вашему мнению, вы можете быть уверены, что @archived_new_status всегда установлен! Из кода, который вы нам показали, другого пути нет. Это либо true, либо false. Таким образом, ваше мнение становится:

   xxx.myfuncthatNeedsTrueOrFalse(<%= @archived_new_status.to_s %>);

(я предполагаю, что вы вызываете какую-то функцию javascript здесь, с требуемым параметром либо true, либо false. Вы уверены, что значение правильно преобразовано в строку? -> я добавил .to_s для ясности)

Из того, что вы нам показываете, ничего страшного не может быть, так что подытожим:

  • можете ли вы убедиться, что @archived_new_status установлен правильно, если нет, показать полный пример кода
  • в представлении, которое вы отображаете, вы правильно преобразовываете значение в строку? Можете ли вы объяснить, что вы пытаетесь сделать?
0 голосов
/ 18 января 2011

Вы можете сделать:

if params[:archive] && !params[:archive].blank?
    @archived_new_status = params[:archive]
end

Но вы можете захотеть поставить проверку в модель или вызвать исключения для приложения. См. Проверка формы Rails

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...