标签: ruby-on-rails-5

verify_authenticity_token尚未定义

Ruby版本2.2.4,Rails版本5.0.0.1.

我陷入了测试登录的教程的一部分curl.我收到一个错误

ArgumentError(在process_action回调之前:尚未定义verify_authenticity_token).

我在sessions_controller中使用了这段代码:

skip_before_action :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' }
Run Code Online (Sandbox Code Playgroud)

有人知道答案吗?

ruby-on-rails ruby-on-rails-5

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

传递给#or的关系必须在结构上兼容.不兼容的值:[:references]

我有两个查询,我需要or它们之间,即我想要第一个或第二个查询返回的结果.

第一个查询是一个简单的where()获取所有可用项目.

@items = @items.where(available: true)
Run Code Online (Sandbox Code Playgroud)

第二个包括a join()并给出当前用户的项目.

@items =
  @items
  .joins(:orders)
  .where(orders: { user_id: current_user.id})
Run Code Online (Sandbox Code Playgroud)

我尝试以or()各种形式将这些与Rails的方法结合起来,包括:

@items =
  @items
  .joins(:orders)
  .where(orders: { user_id: current_user.id})
  .or(
    @items
    .joins(:orders)
    .where(available: true)
  )
Run Code Online (Sandbox Code Playgroud)

但我一直遇到这个错误,我不知道如何解决它.

Relation passed to #or must be structurally compatible. Incompatible values: [:references]
Run Code Online (Sandbox Code Playgroud)

sql postgresql activerecord ruby-on-rails ruby-on-rails-5

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

Rails 5 API protect_from_forgery

我有一个Rails 5 API应用程序(ApplicationController < ActionController::API).需要为此API的一个端点添加一个简单的GUI表单.

最初我ActionView::Template::Error undefined method protect_against_forgery?在尝试渲染表单时得到了.我添加include ActionController::RequestForgeryProtectionprotect_from_forgery with:exception到终点.哪个问题按预期解决了.

但是,当我尝试提交此表格时,我得到:422 Unprocessable Entity ActionController::InvalidAuthenticityToken.我添加<%= csrf_meta_tags %>并验证了它meta: csrf-param并且meta: csrf-token存在于我的标题中,并且authenticity_token存在于我的表单中.(令牌本身彼此不同.)

我试过了protect_from_forgery prepend: true, with:exception,没有效果.我可以通过评论来"修复"这个问题:protect_from_forgery with:exception.但我的理解是,这正在关闭我的表格上的CSRF保护.(我想要CSRF保护.)

我错过了什么?

更新:

为了明确这一点,99%的应用程序是纯JSON RESTful API.需要添加一个HTML视图和表单到这个应用程序.因此,对于一个控制器,我想启用完整的CSRF保护.该应用程序的其余部分不需要CSRF,可以保持不变.

更新2:

我只是将这个应用程序的HTML表单和Header的页面源与我编写的另一个传统的Rails 5应用程序进行了比较.的authenticity_token页眉和authenticity_token形式是相同的.在我遇到问题的API应用程序中,它们是不同的.也许那是什么?

更新3:

好的,我不认为不匹配是问题.但是,在工作和非工作应用程序之间的进一步比较中,我注意到网络> Cookie中没有任何内容.我_my_app-session在工作应用程序的cookie中看到了很多东西.

security ruby-on-rails csrf ruby-on-rails-5

21
推荐指数
3
解决办法
2万
查看次数

Rails 5的ActiveRecord :: Migration中的[5.0]是什么意思?

我在Rails 5应用程序中创建的迁移已经5.0传递给了一个方法:

class CreateVariableKeys < ActiveRecord::Migration[5.0]
  ...
end
Run Code Online (Sandbox Code Playgroud)

我想知道这[5.0]意味着什么.

ruby activerecord ruby-on-rails ruby-on-rails-5

20
推荐指数
2
解决办法
2623
查看次数

Rails/RSpec:功能规格中没有"旅行"时间助手?

我只是尝试travel在我的一个功能规范中使用Rails的时间助手方法:

scenario 'published_at allows to set a publishing date in the future' do
  magazine_article.update_attribute(:published_at, Time.now + 1.day)
  expect { visit magazine_article_path(magazine_article.magazine_category, magazine_article) }
         .to raise_error(ActiveRecord::RecordNotFound)

  travel 2.days do
    visit magazine_article_path(magazine_article.magazine_category, magazine_article)
    expect(page).to have_content('Super awesome article')
  end
end 
Run Code Online (Sandbox Code Playgroud)

它给了我这个:

NoMethodError:
   undefined method `travel' for #<RSpec::ExampleGroups::MagazineArticles::AsUser::Viewing:0x007f84a7a95640>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

http://api.rubyonrails.org/classes/ActiveSupport/Testing/TimeHelpers.html

rspec ruby-on-rails activesupport ruby-on-rails-4 ruby-on-rails-5

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

stylesheet_pack_tag没有在带有webpacker gem的rails 5.1中找到app/javascript/src/application.css

当我尝试使用webpacker在我的新rails 5.1 app中加载页面时,我收到此错误.我也希望webpacker能够处理CSS.

Started GET "/" for ::1 at 2017-09-01 12:20:23 -0400
Processing by HomeController#welcome as HTML
  Rendering home/welcome.html.erb within layouts/application
  Rendered home/welcome.html.erb within layouts/application (0.4ms)
Completed 500 Internal Server Error in 28ms



ActionView::Template::Error (Webpacker can't find application.css in /Users/myusername/Documents/testing-ground/myapp/public/packs/manifest.json. Possible causes:
1. You want to set wepbacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. Webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's …
Run Code Online (Sandbox Code Playgroud)

css ruby-on-rails-5 webpacker

20
推荐指数
2
解决办法
7147
查看次数

RuntimeError:无法修改冻结的数组

我将Ruby on Rails应用程序更新为Ruby on Rails 5.1.4.当我运行我的测试时,每个测试都会返回以下错误:

An error occurred while loading {path to specific spec file}
Failure/Error: require File.expand_path('../../config/environment', __FILE__)

RuntimeError:
  can't modify frozen Array
# ./config/environment.rb:6:in `<top (required)>'
# ./spec/rails_helper.rb:4:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

编辑:

我正在从5.0.0.1更新到5.1.4.

ruby ruby-on-rails ruby-on-rails-5

20
推荐指数
0
解决办法
3769
查看次数

Rails 5.2 with master.key - Heroku部署

Rails 5.2通过使用awesome引入了加密的秘密功能credentials.yml.但是我很难让它与Heroku一起工作.

现在是否有任何策略可以将Rails 5.2应用程序部署到Heroku?

ruby-on-rails heroku ruby-on-rails-5

20
推荐指数
2
解决办法
5840
查看次数

如何使用ActionCable作为API

我使用Rails 5 beta 1和ActionCable构建了一个非常简单的应用程序,以显示用户何时联机并让他们相互发送消息.

现在,我基本上想采取ActionCable的客户端部分,在另一个应用程序(不在 Rails 5上运行)的上下文中实现它,并将其与第一个应用程序连接以发送和接收数据(例如在线)用户或消息的状态).

为了从第二个应用程序发送数据,我假设,我可以简单地发出一个AJAX POST请求.问题是:如何从我的第二个应用程序订阅第一个应用程序的开放连接?

或者甚至:如何通过API从另一个应用程序订阅我的Rails应用程序的ActionCable连接?

我的猜测是,我基本上想在我的第二个应用中以某种方式包含这个coffeescript:

App.appearance = App.cable.subscriptions.create "AppearanceChannel",
  connected: ->
    # Called when the subscription is ready for use on the server

  disconnected: ->
    # Called when the subscription has been terminated by the server

  received: (data) ->
    # ...
Run Code Online (Sandbox Code Playgroud)

api ruby-on-rails ruby-on-rails-5 actioncable

19
推荐指数
2
解决办法
9727
查看次数

使用Rails 5.2 ActiveStorage创建和保存pdf,然后附加到电子邮件

我担心新的主动存储功能会出现问题.我想要做的是创建一个pdf(我正在使用WickedPdf)并将其附加到模型.这是第一个问题,我到目前为止唯一的想法是首先写入文件,然后打开此文件以创建附件.

self.document.attach( {
  filename: "filename.pdf",
  io: File.open(pdf_document)
})
Run Code Online (Sandbox Code Playgroud)

有没有办法从字符串创建附件?

之后我尝试将此文件附加到邮件中.这会失败,因为它需要一个文件,而不是一个blob.

attachments[document.filename.to_s] = document.blob
Run Code Online (Sandbox Code Playgroud)

再次创建一个文件对我来说似乎很奇怪.

可以请有人告诉我,如果没有编写文件,那么实现这一目标的正确方法是什么?对我来说,这似乎是不必要的,无用的和耗时的.

=====

解决方案第2部分:所以我设法在不创建文件的情况下附加文档

attachments[document.filename.to_s] = {:mime_type => 'application/pdf',
                               :content => document.attachment.blob.download }
Run Code Online (Sandbox Code Playgroud)

第一部分仍然缺失.希望有人有答案!

ruby-on-rails ruby-on-rails-5 rails-activestorage ruby-on-rails-5.2

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