小编Dra*_*kic的帖子

将Rspec默认GET请求格式设置为JSON

我正在使用Rspec为我的控制器进行功能测试.我已将路由器中的默认响应格式设置为JSON,因此每个没有后缀的请求都将返回JSON.

现在在rspec中,当我尝试时,我得到一个错误(406)

get :index
Run Code Online (Sandbox Code Playgroud)

我需要去做

get :index, :format => :json
Run Code Online (Sandbox Code Playgroud)

现在因为我主要使用我的API支持JSON,所以必须为每个请求指定JSON格式是非常多余的.

我可以以某种方式将其设置为我的所有GET请求的默认值吗?(或所有要求)

rspec ruby-on-rails functional-testing

48
推荐指数
6
解决办法
3万
查看次数

如何触摸HABTM关系

如果您有两个模型,视频和类别,并且它们之间具有"has_and_belongs_to_many"关系,那么当其中一个模型发生更改时,如何执行触摸以使缓存无效?

你不能像对待一对多关系一样"触摸"它们.现在,当我更改类别名称时,属于该类别的视频在我使缓存无效之前不知道更改.我的视图模板显示每个视频的类别名称.

activerecord caching ruby-on-rails

17
推荐指数
2
解决办法
4566
查看次数

如何使用ActionMailer获取电子邮件正文

我正在发送一个像这样的Rails标准电子邮件

@mail = mail(to: registration.user.email, subject: "Registration Confirmation: #{@site.name}")
Run Code Online (Sandbox Code Playgroud)

现在我需要从电子邮件中获取邮件正文(或本例中为html).我尝试了以下但它不起作用,因为它不返回渲染的电子邮件而是模板(包括ERB和Haml).

@mail.body
@mail.body.raw_source
@mail.body.encoded
Run Code Online (Sandbox Code Playgroud)

这样做似乎非常困难.我需要一个人在收到电子邮件时看到的结果.

更新

我看到的ERB和Haml是一个HTML注释,这就是为什么在日志中它看起来像ERB而不是渲染的tempalte.所以@ mail.body.encoded工作得很好.

email ruby-on-rails actionmailer

10
推荐指数
2
解决办法
5189
查看次数

获取集合时Backbone.js进度条

我想用新内容更新应用程序时显示进度条.我想最好的办法就是在集合上调用.fetch时这样做.

我获取的内容主要是图像(视频海报等),但我只获得链接,而不是base64字符串或大的东西.我想要做的是在获取图像链接时使用进度条覆盖屏幕,渲染视图以使所有图像都准备就绪,然后覆盖图应该消失并显示已加载新内容的应用程序.

现在我不知道如何为此构建一个进度条,因为我不是直接获取图像而只是链接然后渲染视图.

backbone.js progress-bar

7
推荐指数
2
解决办法
8882
查看次数

运行成功的'create'操作后的NoMethodError

我发送一个帖子请求到我的API工作正常,它创建一个新的记录.但是,在创建记录后,我在服务器日志中收到此错误

NoMethodError (undefined method `device_url' for #<Api::V1::DevicesController:0x007fa2f5dde5d8>):app/controllers/api/v1/devices_controller.rb:14:in `create'
Run Code Online (Sandbox Code Playgroud)

这是我的创作动作

def create
    respond_with Device.create(params[:device])
end
Run Code Online (Sandbox Code Playgroud)

我的所有资源都在Api#V1下命名,这是我的路由文件

# Api ('/api')
namespace :api do
    # Version 1 ('/api/v1')
    namespace :v1 do
        # Locations ('/api/v1/locations')
        resources :locations
        # Videos ('/api/v1/videos')
        resources :videos
        # Devices ('/api/v1/devices')
        resources :devices
    end
end
Run Code Online (Sandbox Code Playgroud)

nomethoderror ruby-on-rails-3

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

Rails ActiveStorage 如何通过 REST API 上传文件

我找不到有关如何将文件从外部服务或应用程序(iOS 应用程序、Go 应用程序 .. 等等)上传到使用 Active Storage 本地文件存储的 Rails REST API 的任何资源。

我能找到的所有教程都使用 HTML 表单。我想通过 POST 请求将我的文件上传到 Rails API。我不确定的主要问题是我需要在后端发送文件的标题和格式。

rest ruby-on-rails rails-activestorage

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

如何设置动画/变形菜单按钮,如Facebook Paper应用程序

我在Facebook Paper应用程序中看到了这个动画/变形,当你点击它时,它们会将菜单按钮变形为X,然后返回X. 我记录它是因为我不知道如何以任何其他方式显示它.

https://www.youtube.com/watch?v=y6j_mVgv-NM

有人可以向我解释这是如何完成的吗?我想为我的应用程序.

animation morphing ios

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

ActionCable:如何使用动态渠道

我与Rails 5和ActionCable建立了一个简单的聊天,我有一个简单的"聊天"频道.

如何使频道订阅和消息广播动态化,以便创建聊天频道并将消息发送到正确的频道?

遗憾的是,我找不到一个代码示例.

更新

以下答案是正确的.我也发现它现在在导轨指南中提到过.在http://edgeguides.rubyonrails.org/action_cable_overview.html#client-server-interactions-subscriptions之前不要认为它在那里

ruby-on-rails-5 actioncable

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

Backbone.js和导航

由于骨干网没有办法做大多数事情,我很多东西都很困惑.其中一个是浏览我的应用程序的正确方法.

我意识到BB路由器有一个'.navigate'方法,可以用来推送网址和触发路由.现在,由于我的应用程序有多个路由器,我不确定在一个或其他路由器上调用'.navigate'之间有什么区别.

这是我的路由器

new Etaxi.Routers.System()
new Etaxi.Routers.Header()
new Etaxi.Routers.Videos()
new Etaxi.Routers.News()
Run Code Online (Sandbox Code Playgroud)

现在我能做到

router = Etaxi.Routers.System()
// or i could do
router = Etaxi.Routers.Header()

router.navigate(url)
Run Code Online (Sandbox Code Playgroud)

我用于全球应用导航的路由器有什么区别吗?这对我来说似乎很奇怪.

backbone.js backbone-routing

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

使用嵌套的资源或在资源上有一个集合

我有2个型号,'设备'和'DeviceActivity',其中设备有许多设备活动.现在,如果我使用常规资源嵌套,我最终会得到类似的东西

/devices/1/activities
Run Code Online (Sandbox Code Playgroud)

要么

/devices/1/activities/1
Run Code Online (Sandbox Code Playgroud)

我想要的是访问

/devices/activities
Run Code Online (Sandbox Code Playgroud)

我想要显示所有设备的所有活动,例如活动流.是否正确地在Devices资源上创建集合?

routes ruby-on-rails

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

POST 数据未显示在自定义路由的参数中

我有这样的 Rails 路线

resources :agents do
  member do
    post :location_wifi
  end
end
Run Code Online (Sandbox Code Playgroud)

controllers/agents_controller.rb和这样的方法

def location_wifi
    puts params
    puts params.permit!

end
Run Code Online (Sandbox Code Playgroud)

我使用 JSON 有效负载向该路由发送 POST 请求,例如

{ "custom": {"model": "a"} }
Run Code Online (Sandbox Code Playgroud)

当我检查参数时,我看不到我发送到任何地方的 POST 有效负载。我在这里发送的数据没有存储在数据库中,而是发送到谷歌 API,并且该结果稍后被存储。由于这个原因,我没有它的模型。

这里发生了什么?为什么我无法访问 POST 负载?

post ruby-on-rails

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