1

更新:我已将问题缩小到 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"] 的 Pseud (ActiveRecord::RecordNotFound)

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

这是我正在处理的分支:https ://github.com/scottsds/otwarchive/compare/upgrade_capybara_1_1_4 。谢谢你提供的所有帮助!

default_pseud 返回:#< Pseud:0x0000000a224070 >,这是正确的。

4

2 回答 2

1

You're putting your [current_user.default_pseud.id] into an array. Try it without the brackets, like this:

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

and currrent_user.default_pseud.id will be evaluated as a string, which seems like what you want.

于 2013-04-22T04:39:22.780 回答
1

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

试试这个,伪 ID不在括号中:

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

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

于 2013-04-22T04:37:31.173 回答