最近我从这个讨论中了解了路由中的rails问题 如何在命名空间和根路径的路由中有一个资源--Rails 4.现在在我的应用程序中,我有这样的路线:
namespace :admin do
resources :photos
resources :businesses
resources :projects
resources :quotes
end
resources :photos, param: 'slug'
resources :businesses, param: 'slug' do
resources :projects, param: 'slug' #As I need both the url one inside business and one outside
end
resources :projects, param: 'slug'
resources :quotes, param: 'slug'
Run Code Online (Sandbox Code Playgroud)
而且还有更多的资源在我需要的时候重复着.我知道如何实施它们.关心我可以这样做:
concern :shared_resources do
resources :photos
resources :businesses
resources :projects
resources :quotes
end
namespace :admin do
concerns :shared_resources
end
concerns :shared_resources
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能param在每次关注中给出不同的看法?我尝试这样做:
concerns :shared_resources, param: 'slug'
Run Code Online (Sandbox Code Playgroud)
但这并没有改变路线.如果我补充:
resources …Run Code Online (Sandbox Code Playgroud) 实际上我的要求是将一些文件压缩到一些文件夹中。我已经在我的服务器上保存了许多文件并与一些对象关联。所以我必须压缩与一个对象相关的所有文件,如下所示:
这是我的层次结构的一个示例。我所做的是创建这些文件夹,复制这些文件夹中的文件,并使用以下代码创建 zip:
在 rubyzip 库本身上找到。但是,当我在 Windows 上解压缩此文件并在 Microsoft Excel 中打开它时,出现以下错误:
我们发现“FileName.xlsx”中的某些内容存在问题。您希望我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”
按“是”可以恢复文件,但我不知道为什么会出现此错误。我尝试在将 Excel 文件复制到工作正常的服务器上时打开该文件,但是一旦压缩并解压缩该文件,就会出现错误。我已经看到了该主题的一些不同问题,例如:
由 rubyzip 压缩的 xlsx 无法被 Excel 读取
但没有得到帮助。
我尝试做的更多事情就是设置压缩级别,并尝试将其设置为Zlib::DEFAULT_COMPRESSIONrubyzip,但尽管如此,我还是遇到了同样的问题。另外,在某些地方,甚至在自述文件中,如果 rubyzip 我发现我们可以使用:
改用
write_bufferopen
我在这条线上尝试了它(我能找到的最好的):
但它给了我一个不同的例外,所以如果这是解决方案,我不知道如何使用它。
我创建了spec/lint/rubocop_spec.rb,它在当前分支和master之间更改的文件上运行Rubocop样式检查器.这在我本地测试时有效,但在构建服务器Circle.ci上运行测试时则无效.我怀疑这是因为只有有问题的分支被下载,所以它没有找到master之间的任何差异.有比这更好的方法git co master && git pull origin master吗?我是否可以查询Github API以获取列出的文件?
require 'spec_helper'
describe 'Check that the files we have changed have correct syntax' do
before do
current_sha = `git rev-parse --verify HEAD`.strip!
files = `git diff master #{current_sha} --name-only | grep .rb`
files.tr!("\n", ' ')
@report = 'nada'
if files.present?
puts "Changed files: #{files}"
@report = `rubocop #{files}`
puts "Report: #{@report}"
end
end
it { @report.match('Offenses').should_not be true }
end
Run Code Online (Sandbox Code Playgroud) 我正在研究轨道并使用带轨道的发动机。在生产模式下,rails 没有加载引擎的编译资源,尽管我已经执行了:
$ RAILS_ENV=production bundle exec rake assets:clean assets:precompile
Run Code Online (Sandbox Code Playgroud)
如果有人知道这个问题请帮忙。
我的设置如下:
环境/生产.rb
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_files = false
config.assets.compile = false
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new`
Run Code Online (Sandbox Code Playgroud)
引擎/xxx/lib/xxx/engine.rb
引擎的选项是——可安装
module Moderna
class Engine < ::Rails::Engine
isolate_namespace xxx
# parent company asset precompile
initializer "xxx.assets.precompile" do |app|
app.config.assets.paths << Rails.root.join("app", "assets", "fonts")
app.config.assets.precompile << %w(
xxx/*.css xxx/fancybox/*.css xxx/skin/*.css xxx/google-code-prettify/*.css
xxx/*.js xxx/flexslider/*.js xxx/google-code-prettify/*.js
xxx/portfolio/*.js …Run Code Online (Sandbox Code Playgroud) 我已尝试过在此处发布的类似问题提供的多种解决方案,但似乎没有任何效果.我无法安装Rails.错误信息如下.另外,Wwen我试着通过使用安装Xcode xcode-select --install,它给我一个网络安装cannot download due to network请指教.我是Ruby的新手,所以非常感谢任何帮助.干杯.
nmacaule-mn1:~ nmacaule$ gem install rails --no-ri --no-rdoc
Building native extensions. This could take a while...
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.
/Users/nmacaule/.rvm/rubies/ruby-2.2.0/bin/ruby -r ./siteconf20150209-56320-1m9byas.rb extconf.rb
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using packaged libraries.
-----
The file "/usr/include/iconv.h" is missing in your build environment,
which means you haven't installed Xcode Command Line Tools …Run Code Online (Sandbox Code Playgroud) 我们有一个正在使用 uk_postcode gem 的项目。有一个验证器类如下:
class UkPostcodeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
postcode = UKPostcode.parse(value.to_s)
return if postcode.full_valid?
record.errors.add attribute, :invalid_uk_postcode, options
end
end
Run Code Online (Sandbox Code Playgroud)
上面的代码在 Ruby 2.7.6 上运行良好,但现在我需要更新到 Ruby 3.0.0。当我这样做时,我们的测试会中断并给出以下错误:
Failure/Error: record.errors.add attribute, :invalid_uk_postcode, options
ArgumentError:
wrong number of arguments (given 3, expected 1..2)
Run Code Online (Sandbox Code Playgroud)
我的 Ruby 和 Rails 知识还不是很丰富,但是在网上搜索了很多内容并尝试了不同的东西之后,我发现更改record.errors.add attribute, :invalid_uk_postcode, options可以record.errors.add attribute, :invalid_uk_postcode, **options修复测试。因此,在最后一个参数中添加 ** 可以修复测试,并且验证似乎可以正常工作。从我到目前为止所读到的内容来看,参数似乎必须更加具体,并且通过添加 ** 使其成为关键字参数(我假设它可以采用任何类型/值),但因为我不是作为 Ruby 和 Rails 方面的专家,这更多的是猜测,而不是正确理解这一点。
有人可以更好地指导吗?通过这种方式修复上述更改似乎可以吗?为什么在最后一个参数中添加 ** 可以修复错误问题?
我不确定自动取款机、选项指的是什么以及我将来会研究的内容,但任何知道并可以回答的人将不胜感激。谢谢
网上搜索了一下错误,可以看到Ruby语法有变化。试图理解这一点。
我使用Ruby on rails创建了一个网站,并为我的用户提供了一个包含点的数据库.每个用户都有积分,所以我会把它称为@user.points.我可以通过使用以下方式查看点数:
<%= user.points %>
Run Code Online (Sandbox Code Playgroud)
当用户完成某个操作时,我正试图从我的页面增加这些点数.所以我试着这样做:
<% @user.points += 100 %>
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我觉得有一个简单的解决方案,或者我正在监督一些事情.
我已经将我的rails项目从4.x升级到5.0.0.beta1以使用actioncable并且我已经按照DHH的例子进行了操作但它无法正常工作.当我启动rails服务器时,它显示错误:
$ rails s
=> Booting Puma
=> Rails 5.0.0.beta1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/configuration.rb:15:in `initialize': uninitialized constant ActionCable::Server::Configuration::ApplicationCable (NameError)
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/base.rb:16:in `new'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/base.rb:16:in `block in <class:Base>'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/core_ext/module/attribute_accessors.rb:72:in `block in mattr_reader'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/core_ext/module/attribute_accessors.rb:55:in `each'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/core_ext/module/attribute_accessors.rb:55:in `mattr_reader'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/core_ext/module/attribute_accessors.rb:208:in `mattr_accessor'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/base.rb:16:in `<class:Base>'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/base.rb:12:in `<module:Server>'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/base.rb:7:in `<module:ActionCable>'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable/server/base.rb:6:in `<top (required)>'
from /home/laport/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.beta1/lib/action_cable.rb:43:in `server'
from /home/laport/Téléchargements/Nouveau TP/Module_chat (copie)/config/routes.rb:28:in `block …Run Code Online (Sandbox Code Playgroud) 我有两种用户类型:艺术家和粉丝.我希望粉丝能够跟随艺术家.到目前为止,它们不起作用,但取消后续工作.我有create和destroy建立以同样的方式,但似乎无法得到它的工作.我在尝试create关系时遇到错误找不到没有ID的艺术家.无论如何,我可以找到艺术家的ID?
代码如下:
relationships_controller.rb
class RelationshipsController < ApplicationController
before_action :authenticate_fan!
def create
@relationship = Relationship.new
@relationship.fan_id = current_fan.id
@relationship.artist_id = Artist.find(params[:id]).id #the error
if @relationship.save
redirect_to (:back)
else
redirect_to root_url
end
end
def destroy
current_fan.unfollow(Artist.find(params[:id]))
redirect_to (:back)
end
end
Run Code Online (Sandbox Code Playgroud)
artists_controller.rb
def show
@artist = Artist.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
艺术家/ show.html.erb
<% if fan_signed_in? && current_fan.following?(@artist) %>
<%= button_to "unfollow", relationship_path, method: :delete, class: "submit-button" %>
<% elsif fan_signed_in? %>
<%= form_for(Relationship.new, url: relationships_path) do |f| %>
<%= …Run Code Online (Sandbox Code Playgroud) ruby ×2
actioncable ×1
assets ×1
axlsx ×1
circleci ×1
extconf.rb ×1
git ×1
precompiled ×1
production ×1
routes ×1
rubocop ×1
ruby-3 ×1
rubygems ×1
rubyzip ×1
validation ×1
variables ×1