Rails - 使用true和false

时间:2011-01-18 18:56:16

标签: ruby-on-rails ruby ruby-on-rails-3

我的控制器中有以下内容:

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时有效。当我在@archived_new_status上执行Rails.logger.info为false时,它什么都不输出,如果我检查它,我就会变错。

有什么想法吗?

6 个答案:

答案 0 :(得分:3)

控制器中的代码可以写成:

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

查看:我不明白你为什么检查变量是否为零; @archive_new_status是true或false,所以只需调用JS代码(使用to_json来获取任何参数):

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

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分:0)

你可以这样做:

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

但您可能希望在模型中进行验证或引发应用程序异常。见Rails form validation

答案 3 :(得分:0)

我是否正确理解变量@archived_new_status未设置?但是,您展示的代码始终将其设置为truefalse

我会改写如下:

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

与上面的代码相同,只是更简单(也许更清晰)。然后你可以写得更短:

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

(实际上这与你向我们展示的完全相同)。 在您的视图中,您可以确保始终设置@archived_new_status!从您向我们展示的代码中,没有别的办法。它是truefalse。所以你的观点变成了:

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

(我假设你在这里调用了一些javascript函数,其中有一个想要的参数为true或false。你确定该值是否正确转换为字符串? - &gt;为了清楚起见,我添加了.to_s

从你向我们展示的内容来看,没有什么可错的,所以总结一下:

  • 是否可以确保@archived_new_status设置正确,如果没有,则显示完整的代码示例
  • 在您正在渲染的视图中,您是否正确地将值转换为字符串?你能解释一下你想做什么吗?

答案 4 :(得分:0)

Rails.logger.info false错误地输出任何内容(请参阅my answer to your other question),所以我认为这隐藏了你真正的问题。

ERB <%= something %>隐式调用something.to_s,但是false.to_s == 'false',因此您所看到的最可能的解释是@archived_new_status根本没有设置,或者没有传递给视图模板。

答案 5 :(得分:0)

试试这个。我认为它是@archived_new_status是一个布尔值(真或假)

params[:archive] ? @archived_new_status : !@archived_new_status