我想覆盖: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. 有人可以帮忙吗?
好吧,这将有点难以解释,所以请多多包涵...
我有一个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) 在 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 中使用?
家伙,现在我要上传带有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时,我也一无所获
在我的 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)
有谁知道我可能会遗漏什么或如何让它发挥作用?