标签: actiondispatch

使用嵌套资源覆盖命名路由参数

我想覆盖:id参数,解释了如何。但并不真正适用于嵌套资源。我的路线如下:

resources :users, param: :user_id do
  resources :projects, param: :project_id
end
Run Code Online (Sandbox Code Playgroud)

这会生成格式为 的 url::user_user_id/:project_id。我宁愿把它作为:user_id/:project_id. 有人可以帮忙吗?

routes ruby-on-rails actiondispatch

3
推荐指数
1
解决办法
1972
查看次数

使用Rails转发未处理的多部分HTTP请求

好吧,这将有点难以解释,所以请多多包涵...

我有一个Rails应用程序,其中包含为ESRI ArcGIS javascript API编写的大型javascript代码库,以与存储在ESRI ArcGIS Server上的空间数据进行交互。ESRI ArcGIS javascript API使用通常称为“ ArcGIS Server代理”的东西将请求转发到需要基于令牌的身份验证或时间太长而无法在URL中直接处理的ArcGIS Server服务。AGS代理仅向传递给它的URL发出HTTP请求,然后将与原始请求一起传递的所有其他参数转发给ArcGIS Server服务,后者进行了繁重的工作并以JSON进行响应。有关AGS代理的更多信息,请参考ArcGIS Resource Center上的下一页

鉴于AGS代理仅由ESRI以ASP.Net,Java和PHP形式提供,因此我自由地将AGS代理编写为Rails控制器。我之所以选择这种方法,是因为JSAPI不支持跨域请求,并且出于托管的原因,我不想在Rails应用程序中提供PHP或在JRuby之上运行我的应用程序。我的Rails AGS在我遇到到目前为止,除了多的要求,这与附件编辑器的功能,这是说明发生的所有情况下,代理的作品在这里

在尝试使多部分请求正常工作的过程中,由于法拉第的简单性和对多部分请求的支持,我选择使用Faraday向ArcGIS Server服务发出HTTP请求。我尝试执行多部分请求的代码如下:

# Configure the request
uri = URI.parse(url)
conn = Faraday.new(:url => ("http://" + uri.host.downcase)) do |faraday|
  faraday.request :multipart
  faraday.request :url_encoded
  faraday.response :logger
  faraday.adapter Faraday.default_adapter
end

# Make request
response = conn.post uri.path do |req|
  req.body = agsparams
end
Run Code Online (Sandbox Code Playgroud)

“ agsparams”变量是传递给ArcGIS Server的参数的哈希。

尝试执行此代码时,Ruby在发出实际请求的行上出错,并显示以下错误,这是我当前遇到的错误:

NoMethodError (undefined method `local_path' for #ActionDispatch::Http::UploadedFile:0x007ffbe198fe60
Run Code Online (Sandbox Code Playgroud)

当我将params哈希转储到控制器中时,它看起来类似于以下内容:

{
   "attachment"=>#ActionDispatch::Http::UploadedFile:0x007ffbe198fe60
   @original_filename="test_image.jpg",
   @content_type="image/jpeg",
   @headers="Content-Disposition: form-data; name=\"attachment\"; …
Run Code Online (Sandbox Code Playgroud)

ruby http arcgis-server actiondispatch ruby-on-rails-3.2

2
推荐指数
1
解决办法
2068
查看次数

Rails - 如何在 ActiveJob 中使用 ActionDispatch::Integration::Session

在 Rails 的控制台app中定义为

[1] pry(main)> app
=> #<ActionDispatch::Integration::Session:0x000000189028e8
Run Code Online (Sandbox Code Playgroud)

现在,我有一份简单的工作,例如:

class MyJob < ActiveJob::Base
  queue_as :low

  def perform
    app.get('/my/path', nil, {'Accept-Language' => "it"})
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我打电话MyJob.perform_now我得到

NameError:未定义的局部变量或方法“app”

如何app在 Rails 的 ActiveJob 中使用?

ruby-on-rails actiondispatch rails-activejob

2
推荐指数
1
解决办法
728
查看次数

rails4上传文件扩展名错误ActionDispatch :: Http :: UploadedFile

家伙,现在我要上传带有Rails 4的文件我的问题现在我无法在上传之前检查文件扩展名

注意: 我可以很好地上传文件, 但是我想在上传之前获取文件种类

因为我需要在应用程序的另一步骤中进行扩展。

我试图使用命令

File.extname(params[:Upload])
Run Code Online (Sandbox Code Playgroud)

但总是得到错误

can't convert ActionDispatch::Http::UploadedFile into String

还有如何在上传文件之前获取文件的基本名称?当我尝试使用

File.basename(params[:Upload])
Run Code Online (Sandbox Code Playgroud)

我有同样的错误

can't convert ActionDispatch::Http::UploadedFile into String
Run Code Online (Sandbox Code Playgroud)

当我尝试将名称转换为Sting时,我也一无所获

actiondispatch

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

未定义的方法“切片”

在我的 Rails 4.2.0 应用程序中,我在视图模板中有以下代码:

<% if flash[:tutorial].present? %>
  <% flash.slice(:tutorial) %>
<% end %>

<% flash.each do |name, msg| %>
  <div class="flash <%= name %>">
    <p> 
      <%= msg %>
    </p>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但是它会抛出一个错误:

Undefined method 'slice' for #<ActionDispatch::Flash::FlashHash:0x0818>
Run Code Online (Sandbox Code Playgroud)

有谁知道我可能会遗漏什么或如何让它发挥作用?

ruby ruby-on-rails actiondispatch

-1
推荐指数
1
解决办法
1307
查看次数