Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-使用true和false_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails-使用true和false

Ruby on rails Rails-使用true和false,ruby-on-rails,ruby,ruby-on-rails-3,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%>)

我的控制器中有以下各项:

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

xxx.myFunction需要strueorFalse();
只有当@archived_new_status为true时,这才起作用,当它为false时,似乎不会被设置为false。当我在@archived_new_status上为false执行Rails.logger.info时,它不会输出任何内容,如果我检查它,我会得到false

有什么想法吗?

试试:

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

xxx.myFunction需要strueorFalse();
您可以执行以下操作:

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

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

我是否正确理解变量
@archived\u new\u status
没有设置?尽管如此,您显示的代码始终将其设置为
true
false

我将改写如下:

@archived_new_status = if params[:archive] == 'true'
  true
else
  false
end
与上面的代码相同,只是稍微简单一点(可能更清晰)。然后你可以写得更短:

@archived_new_status = params[:archive] == 'true'
 
(实际上这和你给我们看的完全一样)。 在您看来,您可以确保
@archived\u new\u status
始终处于设置状态!从你给我们看的代码来看,没有其他方法。它是
true
false
。因此,您的观点变成:

   xxx.myfuncthatNeedsTrueOrFalse(<%= @archived_new_status.to_s %>);
xxx.myfuncthatNeedsTrueOrFalse();
(我假定您在这里调用某个javascript函数,所需参数为true或false。您确定该值已正确转换为字符串吗?-->为了清晰起见,我将
。添加到了

从您向我们展示的情况来看,没有什么是错误的,因此总结一下:

  • 您能否确保
    @archived\u new\u status
    设置正确,如果设置不正确,请显示完整的代码示例
  • 在要渲染的视图中,是否将值正确转换为字符串?你能解释一下你想做什么吗

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

@archive_new_status = (params[:archive] == 'true')
视图:我不明白为什么要检查变量是否为零
@archive\u new\u status
为true或false,因此只需调用JS代码(对于任何参数,请使用
调用json
):

xxx.myfuncthatNeedsTrueOrFalse();

Rails.logger.info false
没有错误地输出任何内容(请参阅),因此我认为这隐藏了您真正的问题所在


ERB
隐式调用
something.to\u s
,但是
false.to\u s=='false'
,因此您看到的最有可能的解释是
@archived\u new\u status
根本没有设置,或者没有传递到视图模板。

试试这个。我认为@archived_new_status是一个布尔值(true或false)


谢谢,但鉴于rails.logger的上述输出,false不输出,空白。这意味着如果在上面传递if,它将是空的否?如果要否定对
blank?
的调用,则应使用
present?
。事实证明,HTML不会提交禁用的输入元素。这就是问题所在。其实没关系。。。不是这样的。。。如果变量设置为false,则仍然和issue不会输出任何内容。。。也许Ruby有一种方法可以说作为二进制文件进行计算?
@archived\u new\u status=params[:archive]=“true”?真:假
@archived\u new\u status=params[:archive]=“真”
xxx.myfuncthatNeedsTrueOrFalse(<%= @archived_new_status.to_json %>);
params[:archive] ? @archived_new_status : !@archived_new_status