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