【问题标题】:Backslashes in my params我的参数中的反斜杠
【发布时间】:2013-04-14 21:42:41
【问题描述】:

更新:我已将问题范围缩小到 cucumber-rails gem 做一些时髦的事情。它适用于版本 0.4.1,但除此之外,我得到下面提到的错误。仍然不知道为什么。我已经完成了 gem 的全新安装,但无济于事。

我的参数有问题,包括无关内容。

一个黄瓜测试提交表单,有一个隐藏字段

<% if @collection.new_record? && current_user.pseuds.size > 1 %>
  <dt><%= label_tag "owner_pseuds[]", ts("Owner Pseud(s):") %></dt>
  <dd><%= select_tag "owner_pseuds[]", options_from_collection_for_select(current_user.pseuds, :id, :name, current_user.default_pseud), :multiple => true %></dd>
<% else %>
  <p><%= hidden_field_tag "owner_pseuds[]", [current_user.default_pseud.id] %></p>
<% end %>

当我使用 'Rails.logger.debug 时,它显示我的 owner_pseud ID 是 5。但是当表单被 POST 时,它显示如下。

Started POST "/collections" for 127.0.0.1 at 2013-04-22 05:01:57 +0100
  Processing by CollectionsController#create as HTML
  Parameters: {"utf8"=>"✓", "owner_pseuds"=>["[\"5\"]"], "collection"=>{"name"=>"collection1", ...

我最终得到: 找不到 ID=["5"] (ActiveRecord::RecordNotFound) 的 Pseud

我正在使用 cucumber-rails (v. 1.3.1) 和 Capybara (v1.1.4)。

这是我正在处理的分支:https://github.com/scottsds/otwarchive/compare/upgrade_capybara_1_1_4。感谢您提供的任何帮助!

default_pseud 返回:#,正确。

【问题讨论】:

  • default_pseud 返回的是什么?

标签: ruby-on-rails ruby


【解决方案1】:

你为什么要在括号中指定你的 pseud-id?我认为这就是问题所在,因为 Rails 试图保留单字符串数组格式。

试试这个,用括号中的伪 ID not

<p><%= hidden_field_tag "owner_pseuds[]", current_user.default_pseud.id %></p>

这假设 default_pseud.id 不会是一个数组,从查看您的代码来看,我认为这是一个正确的假设。

【讨论】:

    【解决方案2】:

    您将 [current_user.default_pseud.id] 放入数组中。试试不带括号的,像这样:

    <p><%= hidden_field_tag "owner_pseuds[]", current_user.default_pseud.id %></p>
    

    并且 currrent_user.default_pseud.id 将被评估为一个字符串,这似乎是你想要的。

    【讨论】:

    • 我仍然遇到同样的错误。我应该注意到,这个特定的测试(work_create.feature)使用旧版本的 cucumber-rails 和 capybara 在主分支上传递。我没有对实际功能本身进行任何更改,并且在回溯 (gist.github.com/scottsds/5b6774b3aa2c84cabe91) 之后,我没有看到任何错误。我也无法在应用程序的实时副本上的黄瓜测试之外重现此错误。
    • 将 owner_pseuds[] 更改为 owner_pseuds,您的 current_user.default_pseud.id 将作为字符串传递,而不是在数组容器中传递。
    • 不幸的是 owner_pseuds 必须是一个数组,因为用户有可能拥有多个数组。让它作为字符串传入会导致稍后在 create 方法中尝试在其上使用 .each 时出错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多