小编wil*_*l_d的帖子

RSpec测试破坏方法(Rails Tutorial 3.2 Ch.9,Ex.10)

注意:我已经阅读了这个问题和答案,但由于某些原因,代码对我不起作用.(见下面我得到的错误)

Rails教程第9章练习10要求您:修改[针对用户]的销毁操作,以防止管理员用户自行销毁.(先写一个测试.)

这里棘手的部分是测试它,因为应用程序已经为当前用户隐藏了"删除"链接,因此您必须直接执行http请求.

我让代码工作,并通过删除隐藏当前用户的删除链接的代码来测试它.果然,如果我点击当前登录用户的删除链接,它会重定向我并给我通知消息.

来自users_controller.rb

  def destroy
    @user = User.find(params[:id])
    if current_user?(@user)
      redirect_to users_path, notice: "You can't destroy yourself."
    else
      @user.destroy
      flash[:success] = "User destroyed."
      redirect_to users_path
    end
  end
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在编写测​​试时会发送删除请求并调用destroy方法.我试过Rspec测试的解决方案,如果没有删除链接,我将在这里复制:

来自user_pages_spec.rb

 describe "destroy" do
    let(:admin) { FactoryGirl.create(:admin) }

    it "should not allow the admin to delete herself" do
      sign_in admin
      #expect { delete user_path(admin), method: :delete }.should change(User, :count)
      expect { delete :destroy, :id => admin.id }.should_not change(User, :count)
    end
  end
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我从RSpec得到了这个错误

Failures:

  1) …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails railstutorial.org

15
推荐指数
4
解决办法
2万
查看次数

在Rails中上传文件会给出String filename而不是File或StringIO对象

Rails 3,JRuby 1.6.7.2

我一直在尝试"基本"的东西,只需通过表单上传单个文本文件,以便在我的应用程序中进行处理.我看到的问题是,而不是StringIO或文件,我只得到一个文件名的字符串.

这是表单代码

= form_tag(:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post, :multipart => true) do
    = label_tag "file"
    = file_field_tag "upload[file]"
    = submit_tag 'Analyze!'
Run Code Online (Sandbox Code Playgroud)

而控制器代码只是给我@upload一个包含文件名的字符串.

def file
        @upload = params[:upload][:file]
        render :template => 'api/file.html.haml'
      end
Run Code Online (Sandbox Code Playgroud)

在控制器中运行调试器给我@ upload.class = String,它不响应任何文件或StringIO方法,如read.

forms file-upload ruby-on-rails

12
推荐指数
1
解决办法
6148
查看次数

将字符串压入数组中的数组会产生意外结果

我在Ruby中有一个由5个空数组组成的数组.我试图使用<<运算符将字符串推入第一个数组,但结果是字符串被推入所有数组.请帮我理解这个.

预期的产出是:

# => [["car"], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

# => [["car"], ["car"], ["car"], ["car"], ["car"]]
Run Code Online (Sandbox Code Playgroud)

irb dump:

1.9.3-p194 :001 > output = Array.new(5, [])
 => [[], [], [], [], []] 
1.9.3-p194 :002 > output.inspect
 => "[[], [], [], [], []]" 
1.9.3-p194 :003 > output[0].inspect
 => "[]" 
1.9.3-p194 :004 > output[0] << "car"
 => ["car"] 
1.9.3-p194 :005 > output.inspect
 => "[[\"car\"], [\"car\"], [\"car\"], [\"car\"], [\"car\"]]" 
Run Code Online (Sandbox Code Playgroud)

ruby

6
推荐指数
2
解决办法
628
查看次数