草庐IT

php - php uncompress&unpack给出包含一些(10309中的9个)未定义值的数组

coder 2024-04-20 原文

我有一个二进制数据字符串,我使用php解压并解压成一个数组,代码如下(这个php页面的完整代码包含在这个问题的底部):

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  $glycopeptide[$hits] = $row[1];
  echo $row[4];
  // $row[4] contains the binaryString
  $mz = base64_decode($row[4]);
  $unc_mz = gzuncompress($mz);
  $max = strlen($unc_mz);
  $counter = 0;
  for ($i = 0; $i < $max; $i = $i+4) {
    $temp = substr($unc_mz,$i,4);
    $temp = unpack("f",$temp);
    $mz_array[$counter] = $temp[1];
    $counter++;
  }
  $hits++;
}

我发现两个mz_数组(上面的代码,x-coords)都有9个未定义的值(都在末尾),但是int_数组(类似的代码,y-coords)也有9个未定义的值(分布在整个数组中(未分组或在开始/结束)。
下面是我添加到页面中的一个小测试块的示例:
测试代码:
for ($i = 0; $i < $counter; $i++) {
  echo $i;
  echo " -  ";
  echo $mz_array[$i];
  echo " - ";
  echo $int_array[$i];
  echo "<br/>";
} 

输出的“选择”(注意缺少的值):
671 - 274.20001220703 - 429
672 - 274.39999389648 -
673 - 274.60000610352 - 1098
-- skipping a few lines --
10299 - 2199.8000488281 - 0
10300 - 2200 - 0
10301 - - 0
10302 - - 0

最奇怪的部分是,如果我在完整/原始代码中手动输入字符串(见页面底部),我将获得未定义的值,而如果我在下面的代码中手动输入通过执行“echo$row[4]”(包含BinaryString)返回的字符串,则不会产生未定义的值。
<?php
  $string = " /* Copy the string in the spoiler (on this page) here */ ";
  $int = base64_decode($string);
  $unc_int = gzuncompress($int);
  $max = strlen($unc_int);
  $counter = 0; 
  $max_int = 0;
  for ($i = 0; $i < $max; $i = $i + 4) {
     $temp= substr($unc_int,$i,4);
     $temp = unpack("f",$temp);
     $int_array[$counter] = $temp[1];
     echo $counter;
     echo " -- ";
     echo $int_array[$counter];
     echo "<br/>";
     $counter++;
  }
?>

有人有什么建议或想法,为什么会这样?
PS:有人可以添加gzumpress标签吗?(我没有这个名声)。
编辑1
我包含了一个binaryString示例(警告:巨大!)
Y坐标(由代码中注释的echo$row[4]检索):
EJZZZZZZZQQQQQQQQQQQQQQQQQQQQQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKKGKGKGKGKGGGGGXXXQQUUN2N6////7FPCDYJBGGGGGGYXXXXGGGGGGXXXXGGGGGGGGGGWGGGGWGGGGWGGGGGWGGGGGGGGVGGGGGGGGGGGGGGGGGGWGGGGGGGGGGGGGGGGGGGGGGGG福3tvm/boft5tzz4yqwvwf1u+NE89EA7WM/PKE5VWI3JHGFGGVA56XX工程项目/H588I5533CEP1VYUXTQN+H/AN5+Ya9Gubfb2t26ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZUUZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZQXQVLJDBZJV6JPAN1PFXCFJHYQM0HRA8VNRAA+SGF68PRMZ4AEGT型M3YW3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W3W38WIO/A7a0TSN+MADK+M9QDNYNWAO3H76FVAB87ON8K2/S3xNDKFE5JZC0AW型7SRNuyHKKM7BfPNT23G/XHHFBP6RTDKOW/UXMJJ8J2JJJ9UWXMGN4Z7GN7GN7GN7GN7GN7GN0N1UZ5YLE4AVDZZ5YLE4AVDZI+HWK+/0mD+ENMSLWXT8Z8ZZZZZZZZZZZZZ8ZZZZYOTQ118和CK5UGB1/HVSMW5PSW555GS7G5GOL1DPH7FN5FNS7EM26PRJJJJ/HTZ+RJ6TNLRNZC/74EPCZCZXXXXXXX0/LZP4VWWWW555VV5V5555CEMZVNNJGWT1QEY/JZ00Z/XTMP2BBZKBUDLA6KSAHFXVV型JJN+MEYVP+K5C8D3M55NMFRB3RFAYH+K+L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/L/YSERXGUAT3XSV5TXJPK2RZ8YI/KWL6WFF6WFFF6FPR8OHK91V23D2DAX4/NDHW1TXVBQ8DPB/JWIXM9BNODB6YG/EO5OHOR7T6DGR/FNKSVNBM+RYVW6FHWWWW6FH1N0IAK9GMXURL/EUZ3BQUZYBYR/E5YBYBYBYBYBYZ3BYBYBYM/WWar5if7vohyf4dg2m0jstxbvhd/nazodifscuwc6ycz/lfgn8mxa/ityxyo30bzwmSQEVJ2O8J/HM3T3OI/BLCWTYJ43+UT7UFDCXN5OX418OX418OX418OX418OX418OY28OY28OY28OY28OY28OY28OY28OY28OY28OY28OY28OY28OYQQQDJ10KKKKKWGGGGGGGGGGGGGGGGGGGGGGWY10KKKWKWKWJ7V47SZV3X0J/M3M3PM/T19OQ9W9KKKW9KKKW9KKKKWWW9KWWKWKWKWKWKWKWKWKWJJJKWKWJJJDVTNHEB/WMMKLV/T3XJUSrvi2VQJY7GKN6ER7EBQHMGTBGW型CWH/CTIAGG3LDH0HPVD5C8KOVW7P+FPGQADBQADBQADBQADBQQADBQQADBQQADBQQADBQQQ1NV9Q1YM3CTNTZX4V0S77YW7X6XXXXXX7X6X6X7X7X7X7X7X7X7X7QQQG22Q2Q2Q22Q2Q2QQG/Y8BUF39+0EDOMH4W1AR2UW2UW6BL+BBB4BD6B6BQ3DM36B5F7VN7VNLA9JL09H3SDMV8F62ANKX/F5F5X5X5X5X5X5X5KX 3zudedmjwkwz24amurt59pmsmidojx9o6cgv/tkss公司进入该项目的地点为:7ZCBB2FBSZB2FBSZBLSZBZBSCU4QJAM7WVVKS3LNIKOU6W/LBUJXVxF3UC79TDZQQZK7/H0TWZLV9PSKKKKJ+JH2HVPIBX4UQ+RMPTBY2U2U2U9XLX0KLKX0KLKX0KX0KLKX2NZ6YJC2DZZ6Y2VZZZZ6Y2VZZZZ6YVZZZZ6YVZZ2D6YVZY2VZY2DY2LVVZY2D6VVZY2LV2VVZY2VZY2LXX2LX2LX2LD4WTSFORGZ9HKS9C7H/E5ODA/G2LWGQ5KJGOWBZ型3HHH7JSS3OdoRYHH3H7JSS3OdoRYH3H7JSS3OdoRYH3H7JSS3OdoRJGZZGXW1EPANJH7H7SM/AVJ0/Y6NGPJJW4ZTW4ZTWW4ZTW4ZTW4ZTWZTWW4ZTWZTWZTWW4ZTWW4ZTW4ZJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJsow92jqkzbwljeizitqpf3gnk3j+39wuz/gjsj3/b7/p1zowe2lz9+ej40akegkw9i型6GzanXJP+SW2KW6RW+DKS2Y7SXWWWN0BGG4422 WWWWWWWWWWWWWWWNGWW6WWNGW6WWW6WWW6WWW6WWW6WWWW6WWWW6WWW6WWWWW6WW6WWWW6WW6W6WW6WW6W6WW6W6WW6WW6WW6WW6WW6WW6WW6WWWWWWWWWWNG44222WWWWWWWWWWW4422WWWWWWWWWWWWWWWW6WW6W6W6W6W6W6W6W6W6Wmjs5s3+sse7pgld+gx0hw8wgfgi9s/bxzpu5samdvkbd0wdg2ux5s0s+2a9ik/3651365156565156565156565156515656515651565156565156515651565156565156565156515656515651565156515651565156515651565156565156515651565656565628282828282828282828JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJNHNHFXFFFFFFZZZZJJJJJJNHFXFFFFFFFFZZ9H9H9H9YVC+HBSQ/QRQ+7/BGF类型+7/BGFGFGFGF类型+NCVNRRPA234SCWNRRPA234短短波短波ZUL84UAYYBTVNGBC9SNZDCTNKFDX1U6YLYRBMD9M0FTCPBJODCH型5CFCFC5W5JWEXU43TNVLNEXDESGPYXVN6DRYTZYM+PWO14DKDC3P+TC34KYHK+1KYLVTMPV4PBGB/FUM2MXXGGGGGGGGGGGGGGGGGWGGGWGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGWWWWWW5CFBQA1L/MQSHX+K3HFFTFZQ41VQK6+XVRSWHVE+SABW+LIJU1C/ICDYYLLKMOGKMONZKMZKMZHX+K3HFFFFFFFFKKKFKFFFFFFFKKE70MFEVQR61NE3TF1CDWE0LWRCWAJSXORDVWJTMJ型E3AO6KQXSC+QBOTJ2FS970FCZWD/CJ+4H9HCV8V5S+DND18FWVHWWWWWWWZ5JNL/ZWABMWTV5WL7F0M7K8QYPNVALNPMRVHCYL8ANBTARW8BDWEC8VNTAY4M/ZWABMWWWWWWWWWWWWWWW8VVVVVVVVVVK31FP拉哈巴尼哈扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎克7K5JVVVVVVVVVVVVVVVVVVVVVVVVVV31FPZYGSK26QGUA4WVAG6A/N8VY3FUATGKITNZ31SNAFNBXNZ型5RIXQZDABOVSFBZUU/GA8Z+MQWDMLLDS6JV+ZAXQJJ5+4VDLRLQDMUH7SCMXGM2Q06JD9YCFZZKWF/2NLA1QQXBL2/QJFN0E/GQNOE5ADSCJN3XASBKY0N9NUQBEN8AB8TLU7F7QN7QNZ5N50LYF5N50LYF5N5050LYIFV9Z8YYHB4IVV6GKWWYVV6GWYDWWYVZ704O5OO5OOOK1OK1OOK9OOOOOOK1OK5OK1OOK5OOK1OOKWOK1OK1Omfpel+lsvwnxlxjn9+rxs+sjc9+0ph3oippe5x8svesnmaj3dv8/1UC30E+W1RSBLD8W4AR3WA/UCXXVFDGJ9VQZSR1MI9VQZSR1MI9VQZSR1MI8WW8W4AR3WA/UCXXVFD9VQZ9VZ9VZW9VZHFD9VZSR1KW1KAUW/6KKXHOW0DHJQ1IY/NMXW6BBB7JJBPXXWWZVZV8+I7WW6BBXWW0WHWC5FH+ZXWWWW5W7D7W7DPMAOUWJWWWWWWW7DPMOUUJWWW7DPWWWWWW7DPMoouJWWWWWWWWWWWWWW7DPWW7eckhkyf/jegqa4/kxeny97yj+2wfu/gnz9togu7rby2noj3f+p2ryme/aX97OSBRK+EBR5ZZZZ16MVJF+YYYZZFFFLU4ENOC+C3/A17LL7Lu0TWpZPQPBWWWWWWWWWWWWWWWWUPJ6ARDXZKMPQB8ZZZZPJQUTNFG7XZZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZZL6MW6VVJWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWGON58E8FVP7ULAPC4D33EBMTBVWEI7SEYDYJ86FFB型6X162X16X6X6X6X6X6X6X6X6X6X6X6X6X6X6X6X6X6X6X6ZZZZZZHNJ9ZC7MKZZZZZZZZZZZZZZMKZZZZZMKZZZZMKZKZKZKZKZKZKZKZKZKZKZKZKZMWWZKZWZZZZZZZZD7JNZQZZZ7L7RLP8X8XUZWWWWW9Q6Q4QQQZQZQZQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW9PCDYH4E3GM8QTKN2M6I3M/RKG9T8CMWYZIXSN8C8KNUST1型7N8N0H55R5ZQSML++XT7SCYaZQQYYR/HY63RCYK0RIQ0RIQNWGZGKPMF7VIFRQ9YXXE2SP1V5CD8VOV52RMPfNJVN8N0LOTSQ3UO/PONXXZ5UB8D6MZZNGMVV998G5BMTDL1GBW9PDBZQQL9PDBZCZQM/UZIQPE3W6WWJT6RGRKKY6NZ6NZ30E2PoNZZ30E2PoNZIL/RST+MBSFYYYY2727IFMBYYQR+J1T67S7S7S7S7S7SJJ2009 JJJJJ2009-JJE5RF79kVlokburfax3qlzxlnxbl/sbl0/surumr08h1du型783VADT11VJ2NJZ7JFIXOHWIL/PUDE+MXEJ5VF/OWJA3A的VVVA79EJROWYMWJDEZNHNFLN188ZPHGXYSSIESGGXYSSIESGJBGXOOB473==
完整代码:
<?php
  require 'phplot/phplot.php';
      $type = $_GET['type'];
      $gp = $_GET['gp'];
      $site = $_GET['site'];
      $prec = $_GET['prec'];
      $link = mysql_connect("localhost","reader","") or die (mysql_error());
      mysql_select_db('leidenGlycoPeptide') or die ();
      $query = sprintf("select precursor.mzValue, glycoPeptide.protein, binaryDataArray.arrayLength, binaryDataArray.encodedLength, binaryDataArray.arrayData, precursor.chargeState, run.pepMass, run.PepSeq from glycoPeptide, spectrum, binaryDataArray, run, precursor where run.glycoPeptide = glycoPeptide.id AND spectrum.run = run.id AND precursor.run = run.id AND binaryDataArray.spectrum = spectrum.id AND precursor.id = spectrum.precursor AND spectrum.spectrum like 'm/z' AND precursor.mzValue like '%s' and glycoPeptide.protein like '%s' and run.glycoSite like '%s' and run.glycoType like '%s' ORDER by glycoPeptide.protein, spectrum.spectrum",(string)$prec, (string)$gp, (string)$site, (string)$type);
      $result = mysql_query($query);
      $hits = 0;
      while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        $charge = $row[5];
        $pepmass = $row[6];
        $pepseq = $row[7];
        $glycopeptide[$hits] = $row[1];
        /* Manually entering string here also gives undefined values */
        /* $mz = " I was not able to include the mz string due to message size limit "; */
        $mz = base64_decode($row[4]);
        $unc_mz = gzuncompress($mz);
        $max = strlen($unc_mz);
        $counter = 0;
        for ($i = 0; $i < $max; $i = $i+4) {
          $temp = substr($unc_mz,$i,4);
          $temp = unpack("f",$temp);
          $mz_array[$counter] = $temp[1];
          $counter++;
        }
        $hits++;
      }
      $query = sprintf("select precursor.mzValue, glycoPeptide.protein, binaryDataArray.arrayLength, binaryDataArray.encodedLength, binaryDataArray.arrayData from glycoPeptide, spectrum, binaryDataArray, run, precursor where run.glycoPeptide = glycoPeptide.id AND spectrum.run = run.id AND precursor.run = run.id AND binaryDataArray.spectrum = spectrum.id AND precursor.id = spectrum.precursor AND spectrum.spectrum like 'intensity' AND precursor.mzValue like '%s' and glycoPeptide.protein like '%s' and run.glycoSite like '%s' and run.glycoType like '%s' ORDER by glycoPeptide.protein, spectrum.spectrum",(string)$prec, (string)$gp, (string)$site, (string)$type);
      $result = mysql_query($query);
      while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        /* Manually entering string here also gives undefined values */
        /* $int = " Copy the string from above in here "; */
        $int = base64_decode($row[4]);
        /* The result from this is the above binaryString */
        /* echo $row[4]; */ 
        $unc_int = gzuncompress($int);
        $max = strlen($unc_int);
        $counter = 0;
        $max_int = 0;
        for ($i = 0; $i < $max; $i = $i + 4) {
          $temp= substr($unc_int,$i,4);
          $temp = unpack("f",$temp);
          $int_array[$counter] = $temp[1];
          $counter++;
          if ($temp[1] > $max_int) {
            $max_int = $temp[1];
            $counter++;
          }
        }
      }
      /* The following chunk is just to test the arrays */
      for ($i = 0; $i < $counter; $i++) {
        echo $i;
        echo " -  ";
        echo $mz_array[$i];
        echo " - ";
        echo $int_array[$i];
        echo "<br/>";
      }
      for ($i = 0; $i < $counter; $i++) {
        $plot_data[$i] = array('',$mz_array[$i],$int_array[$i]);
      }
      // Plot the regular spectrum
      $width = 1024;
      $height = 768;
      $plot = new PHPlot($width,$height);
      $plot->SetMarginsPixels(NULL,NULL,NULL,35);
      $plot->SetPrintImage(False);
      $plot->SetPlotType('thinbarline');
      //$plot->SetXTitle('m/z Values');
      $plot->SetXTickAnchor('400');
      $plot->SetDataColors('red');
      $plot->SetXTickIncrement('200');
      $plot->SetXDataLabelPos('none');
      $plot->SetYTitle('Intensity');
      $plot->SetYTickAnchor('0');
      //Might need to define this dynamically with nested if/else loops
      $plot->SetYTickIncrement('100000');
      $plot->SetDataType('data-data');
      $plot->SetDataValues($plot_data);
      $plot->SetTitle('Fragmentation Spectrum');
      //$plot->DrawGraph();

      mysql_close($link);
    ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Query result page</title>
    <script src="jquery-1.9.1.min.js"></script>
  </head>
  <script>
    var gp = '<?php echo htmlspecialchars($_GET['gp']); ?>';
    $(document).ready(function() {
      $('.button').click(function() {
        window.open('http://www.uniprot.org/uniprot/?query='+gp+'+AND+organism:human&sort=score');
      });
      $('.XY').click(function() {
        var mz_array = <?php echo json_encode($mz_array) ?>;
        var int_array = <?php echo json_encode($int_array) ?>;
        var table = 
          "<table border=\"1\">"
            +"<tr>"
              +"<th>m/z</th>"
              +"<th>intensity<t/h>"
            +"</tr>";
        var max = <?php echo $counter ?>;
        for (var i = 0; i < max; i++) {
        table += "<tr>"
                   +"<td>"+mz_array[i]+"</td>"
                   +"<td>"+int_array[i]+"</td>"
                 +"</tr>";
        }
        table += "</table>";
        var disp = window.open();
        $(disp.document.body).html(table); 
      });
    });
  </script>
  <body>
    <p>The displayed spectrum belongs to <?php echo $gp ?> with a precursor [M+H] of <?php echo (($prec*$charge)-($charge+1)); ?>.<br>
    The peptide belonging to this glycopeptide has a mass of <?php echo $pepmass ?> and sequence: <?php echo $pepseq ?>.<br>
    <button class="button">Uniprot search</button> <button class="XY">Display XY data</button></p>
    <img src="<?php echo $plot->EncodeImage();?>" alt="Plot Image">
  </body>
</html>

最佳答案

这很复杂:

$max = strlen($unc_mz);
  $counter = 0;
  for ($i = 0; $i < $max; $i = $i+4) {
    $temp = substr($unc_mz,$i,4);
    $temp = unpack("f",$temp);
    $mz_array[$counter] = $temp[1];
    $counter++;
  }

改用这个:
$mz_array = array_values(unpack("f*", $unc_mz));

关于php - php uncompress&unpack给出包含一些(10309中的9个)未定义值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958671/

有关php - php uncompress&unpack给出包含一些(10309中的9个)未定义值的数组的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  6. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  7. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  8. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

随机推荐