标签: ruby-on-rails-4

如何在Rails 4中引用CSS中的图像

Heroku上的Rails 4有一个奇怪的问题.编译图像时,它们会添加哈希值,但CSS中对这些文件的引用没有调整正确的名称.这就是我的意思.我有一个名为logo.png的文件.然而,当它出现在heroku上时,它被视为:

/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
Run Code Online (Sandbox Code Playgroud)

然而,CSS仍然指出:

background-image:url("./logo.png");
Run Code Online (Sandbox Code Playgroud)

结果:图像不显示.有人碰到这个吗?怎么解决这个问题?

ruby-on-rails heroku ruby-on-rails-4

200
推荐指数
7
解决办法
15万
查看次数

Rails 4真实性令牌

当我遇到一些真实性令牌问题时,我正在研究一个新的Rails 4应用程序(在Ruby 2.0.0-p0上).

在编写响应json的控制器时(使用respond_to类方法),当我尝试使用创建记录时,我create开始ActionController::InvalidAuthenticityToken尝试异常curl.

我确定我设置-H "Content-Type: application/json"并设置数据,-d "<my data here>"但仍然没有运气.

我尝试使用Rails 3.2(在Ruby 1.9.3上)编写相同的控制器,并且我没有任何真实性令牌问题.我四处搜索,看到Rails 4中的真实性令牌发生了一些变化.据我所知,它们不再自动插入表格了?我想这会以某种方式影响非HTML内容类型.

有没有办法解决这个问题,而无需请求HTML表单,抢夺真实性令牌,然后使用该令牌发出另一个请求?还是我完全错过了一些非常明显的东西?

编辑:我刚尝试使用脚手架在新的Rails 4应用程序中创建一个新记录而不改变任何东西,我遇到了同样的问题所以我想这不是我做的事情.

ruby ruby-on-rails authenticity-token ruby-on-rails-4

198
推荐指数
7
解决办法
13万
查看次数

如何解决错误"缺少'secret_key_base`为'生产'环境"(Rails 4.1)

我从头开始创建了一个rails应用程序(rails 4.1),我遇到了一个我无法解决的奇怪问题.

每次我尝试在Heroku上部署我的应用程序时,都会收到错误500:

缺少secret_key_base"生产"环境,请设置此值config/secrets.yml

secret.yml文件包含以下配置:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)

在Heroku上,我已经使用"rake secret"命令的结果配置了一个环境变量"SECRET_KEY_BASE".如果我启动"heroku config",我可以看到具有正确名称和值的变量.

为什么我仍然会收到此错误?

非常感谢

ruby ruby-on-rails heroku ruby-on-rails-4

160
推荐指数
4
解决办法
15万
查看次数

Rails 4 - Gem :: LoadError:为数据库适配器指定'mysql2',但未加载gem

在我的gemfile中我有:

gem 'mysql2'
Run Code Online (Sandbox Code Playgroud)

我的database.yml如下:

default: &default
  adapter: mysql2
  database: <%= ENV['db_name'] %>
  username: <%= ENV['db_user'] %>
  password: <%= ENV['db_pass'] %>
  host:     <%= ENV['db_host'] %>
  pool: 32
  socket:   <%= ENV['socket'] %>

development:
  <<: *default

production:
  <<: *default
Run Code Online (Sandbox Code Playgroud)

我已经运行了两个bundle update并且bundle install我的Gemfile.lock显示了mysql2.

但是,当我运行时,我rake db:migrate在我的计算机和登台服务器上都得到了这个:

myproject.com(master)$ rake db:migrate
WARNING: Use strings for Figaro configuration. 10000012508 was converted to "10000012508".
WARNING: Use strings for Figaro configuration. 860526407370038 was converted to "860526407370038".
rake aborted!
Gem::LoadError: Specified 'mysql2' for database adapter, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mysql2 ruby-on-rails-4 ruby-on-rails-4.1 ruby-on-rails-4.2

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

适用于4.0的Rails Observer替代品

随着Observers正式从Rails 4.0中删除,我很好奇其他开发人员在他们的位置使用了什么.(除了使用提取的宝石.)虽然Observers肯定被滥用并且有时很容易变得笨拙,但是在缓存清除之外有许多用例,它们是有益的.

例如,需要跟踪模型更改的应用程序.观察者可以轻松地观察模型A的变化,并在数据库中记录模型B的变化.如果你想观察几个模型的变化,那么一个观察者就可以处理它.

在Rails 4中,我很好奇其他开发人员使用什么策略代替Observers来重新创建该功能.

就个人而言,我倾向于某种"胖控制器"实现,在每个模型控制器的创建/更新/删除方法中跟踪这些更改.虽然它稍微膨胀了每个控制器的行为,但它确实有助于可读性和理解,因为所有代码都在一个地方.缺点是现在的代码非常相似,分散在几个控制器中.将该代码提取到帮助器方法是一种选择,但您仍然可以调用遍布各处的方法.不是世界末日,也不是"精瘦控制者"的精神.

ActiveRecord回调是另一种可能的选择,虽然我个人并不喜欢,因为在我看来它往往会将两个不同的模型紧密地结合在一起.

所以在Rails 4中,no-Observers世界,如果你必须在创建/更新/销毁另一条记录之后创建一条新记录,你会使用什么样的设计模式?胖控制器,ActiveRecord回调,还是完全不同的东西?

谢谢.

ruby-on-rails ruby-on-rails-4

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

在Rails 4风格中使用lambda和参数的范围?

我想知道如何在Rails 4中完成以下操作,或者我是否只使用Rails 3方法来使用lambda,它可以以与4相同的方式传递参数.

我对Rails 3很新,并尝试使用运行Rails 4的一些示例.

这是我的Rails 3代码:

class Person < ActiveRecord::Base
  scope :find_lazy, lambda {|id| where(:id => id)}
end

# In console I can call
Person.find_lazy(1)
Run Code Online (Sandbox Code Playgroud)

所以,如果这是Rails 4方式是使用 - > {},那是一个lambda,对吧?scope :all_lazy, -> { select("*") }如果我需要一个论点怎么办?我尝试了一些不同的想法,并在使用 - > {}时在控制台中获得参数错误.

scope ruby-on-rails-4 rails-activerecord

141
推荐指数
4
解决办法
9万
查看次数

什么是`params.require(:person).permit(:name,:age)`在Rails 4中做什么?

Rails 4文档中的所有强参数示例都使用

params.require(:person).permit(:name, :age)
Run Code Online (Sandbox Code Playgroud)

可能有人请解构和解释什么是与发生requirepermit这里?

ruby-on-rails-4

139
推荐指数
3
解决办法
7万
查看次数

确定Rails after_save回调中哪些属性发生了变化?

我正在我的模型观察器中设置一个after_save回调,只有当模型的已发布属性从false更改为true 时才发送通知.既然方法改变了?只有在保存模型之前才有用,我目前(并且未成功)尝试这样做的方式如下:

def before_save(blog)
  @og_published = blog.published?
end

def after_save(blog)
  if @og_published == false and blog.published? == true
    Notification.send(...)
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有人对处理这个问题的最佳方法有任何建议,最好使用模型观察者回调(以免污染我的控制器代码)?

model ruby-on-rails callback observer-pattern ruby-on-rails-4

138
推荐指数
6
解决办法
9万
查看次数

Rails 4 - 强参数 - 嵌套对象

我有一个非常简单的问题.但到目前为止还没有找到解决方案.

所以这是我发送给服务器的JSON字符串:

{
  "name" : "abc",
  "groundtruth" : {
    "type" : "Point",
    "coordinates" : [ 2.4, 6 ]
  }
}
Run Code Online (Sandbox Code Playgroud)

使用新的许可方法,我得到:

params.require(:measurement).permit(:name, :groundtruth)
Run Code Online (Sandbox Code Playgroud)

这不会引发任何错误,但创建的数据库条目包含null而不是groundtruth值.

如果我只是设置:

params.require(:measurement).permit!
Run Code Online (Sandbox Code Playgroud)

所有东西都按预期保存,但当然,这会破坏强参数提供的安全性.

我找到了解决方案,如何允许数组,但没有找到使用嵌套对象的单个示例.这必须是某种可能的,因为它应该是一个非常常见的用例.那么它是怎样工作的?

ruby-on-rails nested-attributes strong-parameters ruby-on-rails-4

135
推荐指数
3
解决办法
10万
查看次数

嵌套属性未允许的参数

我有一个Bill对象,它有很多Due对象.该Due对象也属于Person.我想要一个可以在一个页面中创建Bill及其子项的表单Dues.我正在尝试使用嵌套属性创建表单,类似于此Railscast中的表单.

相关代码如下:

due.rb

class Due < ActiveRecord::Base
    belongs_to :person
    belongs_to :bill
end
Run Code Online (Sandbox Code Playgroud)

bill.rb

class Bill < ActiveRecord::Base
    has_many :dues, :dependent => :destroy 
    accepts_nested_attributes_for :dues, :allow_destroy => true
end
Run Code Online (Sandbox Code Playgroud)

bills_controller.rb

  # GET /bills/new
  def new
      @bill = Bill.new
      3.times { @bill.dues.build }
  end
Run Code Online (Sandbox Code Playgroud)

票据/ _form.html.erb

  <%= form_for(@bill) do |f| %>
    <div class="field">
        <%= f.label :company %><br />
        <%= f.text_field :company %>
    </div>
    <div class="field">
        <%= f.label :month …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-4

127
推荐指数
4
解决办法
14万
查看次数