首页 \ 问答 \ Ruby case语句没有按预期执行(Ruby case statement does not perform as expected)

Ruby case语句没有按预期执行(Ruby case statement does not perform as expected)

Fyi,使用Rails。

给定user = User.find(1)

这个case语句返回nil当它返回self.do_something_with_user的结果时。

def case_method
    case self.class
      when User
        self.do_something_with_user # assume does not return nil
      when SomeOtherClass
        self.do_something_else
      else
        nil
    end
end

user.case_method # => nil

我错过了什么? 使用pry, self.class == User返回true。


Fyi, using Rails.

Given user = User.find(1)

This case statement returns nil when it should return the result of self.do_something_with_user.

def case_method
    case self.class
      when User
        self.do_something_with_user # assume does not return nil
      when SomeOtherClass
        self.do_something_else
      else
        nil
    end
end

user.case_method # => nil

What am I missing? Using pry, self.class == User returns true.


原文:https://stackoverflow.com/questions/14452271
更新时间:2022-10-11 08:10

最满意答案

试试这段代码。 它是未经测试的,因为我没有你的api url。

  • 我从ul中删除了类标签 (同名的id和id是坏样式,你不需要它)

  • 对于JQUERY UI TABS,您需要在ul中为选项卡本身插入一个插入,并在ul之后使用另一个插入选项卡的内容。 <li><a href="#tabs-1">tabname</a><li> <div id="tabs-1">content</div>

  • 您的content_dat [0]不需要,因为索引已经存在

    <script>
        var jsonURL = "http://www.myurl.com/api.php/content_data?columns=id_cr,title,teaser&order=title&page=1";
            jQuery(document).ready(function() {
                jQuery.ajax({
                    url: jsonURL,
                    success: searchCallback
                });
            });
            function searchCallback(data) {
                var content_data = data.content_data.records;
                jQuery.each(content_data, function(index, content_dat) {
                    jQuery("#tabs ul").append('<li><a href="#tabs-'+index+'">' + content_dat[2] + '</a></li>');
                    jQuery("#tabs ul").after("<div id='tabs-"+index+"'>"+content_dat[1]+"</div>");
                });
            };
        </script>
    
        <div id="tabs">
            <ul>
            </ul>
        </div>
    

try this code. it is untested as i do not have your api url.

  • i removed the class tabs from the ul (class and id with same name is bad style and you do not need it)

  • for JQUERY UI TABS you need one insert in the ul for the tab itself, and another for the tab's content after the ul. <li><a href="#tabs-1">tabname</a><li> <div id="tabs-1">content</div>

  • your content_dat[0] is not needed, as the index is already there

    <script>
        var jsonURL = "http://www.myurl.com/api.php/content_data?columns=id_cr,title,teaser&order=title&page=1";
            jQuery(document).ready(function() {
                jQuery.ajax({
                    url: jsonURL,
                    success: searchCallback
                });
            });
            function searchCallback(data) {
                var content_data = data.content_data.records;
                jQuery.each(content_data, function(index, content_dat) {
                    jQuery("#tabs ul").append('<li><a href="#tabs-'+index+'">' + content_dat[2] + '</a></li>');
                    jQuery("#tabs ul").after("<div id='tabs-"+index+"'>"+content_dat[1]+"</div>");
                });
            };
        </script>
    
        <div id="tabs">
            <ul>
            </ul>
        </div>
    

相关问答

更多
  • 我认为你不应该调用$.parseJSON(result); 因为你指定了dataType : 'json' (看看我对这个问题的回答为什么'jQuery.parseJSON'没有必要? )所以jQuery会为你解析响应。 看看另一个例子,你也应该回来 dataFilter : function(result) { var data = $.parseJSON(result); return data.content; }, 编辑 ...
  • 由于Javascript是客户端,您将无法使用Javascript写入服务器上的JSON文件。 你需要一些服务器端代码才能做到这一点。 然而,阅读和解析JSON文件并不是问题。 你会使用jQuery.getJSON函数。 您可以提供url和回调参数(不需要数据,因为您正在读取文件,因此不需要发送数据)。 该url将是您的JSON文件的路径,并且回调将是一个使用数据的函数。 以下是您的代码可能的外观示例。 我不确切知道你的JSON是什么,但是如果你有一个名为“products”的集合,其中包含一系列具有“na ...
  • 您可以使用$.parseJSON将您的文本解析为JSON对象。 然后使用jQuery创建你想要的任何元素,并将其追加到你想要的地方。 (这里是一个JSFiddle ) var myJSON = '{ "employee": { "display_name":"EMPLOYEE NAME:", "format":"string", "type":"textbox", "dflt":"null", "isMandatory":"true" } }'; var employee = $.parseJSON( ...
  • 如何仅查看渲染的显示? 为什么我也看到/ api / products的原始json返回? 这是ajax初始化选项卡背后的想法,小部件将只显示ajax调用返回的内容。 您可以让服务器呈现实际的HTML片段,或让renderList返回其结果而不是与DOM本身交互,这将使您有机会: load: function (event, ui ) { var $panel = $(ui.panel) var myHtml = renderList(JSON.parse($panel.text())); ...
  • 试试这段代码。 它是未经测试的,因为我没有你的api url。 我从ul中删除了类标签 (同名的id和id是坏样式,你不需要它) 对于JQUERY UI TABS,您需要在ul中为选项卡本身插入一个插入,并在ul之后使用另一个插入选项卡的内容。
  • tabname
  • content
    您的content_dat [0]不需要,因为索引已经存在