我的控制器中有以下内容:
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时,它什么都不输出,如果我检查它,我就会变错。
有什么想法吗?
答案 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
未设置?但是,您展示的代码始终将其设置为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。你确定该值是否正确转换为字符串? - &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