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)
有人知道答案吗?
我有两个查询,我需要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) 我有一个Rails 5 API应用程序(ApplicationController < ActionController::API).需要为此API的一个端点添加一个简单的GUI表单.
最初我ActionView::Template::Error undefined method protect_against_forgery?在尝试渲染表单时得到了.我添加include ActionController::RequestForgeryProtection并protect_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中看到了很多东西.
我在Rails 5应用程序中创建的迁移已经5.0传递给了一个方法:
class CreateVariableKeys < ActiveRecord::Migration[5.0]
...
end
Run Code Online (Sandbox Code Playgroud)
我想知道这[5.0]意味着什么.
我只是尝试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
当我尝试使用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) 我将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.
Rails 5.2通过使用awesome引入了加密的秘密功能credentials.yml.但是我很难让它与Heroku一起工作.
现在是否有任何策略可以将Rails 5.2应用程序部署到Heroku?
我使用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) 我担心新的主动存储功能会出现问题.我想要做的是创建一个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
ruby-on-rails-5 ×10
activerecord ×2
ruby ×2
actioncable ×1
api ×1
csrf ×1
css ×1
heroku ×1
postgresql ×1
rspec ×1
security ×1
sql ×1
webpacker ×1