标签: ruby-on-rails

如何使列唯一并在Ruby on Rails迁移中将其编入索引?

我想unique在Ruby on Rails迁移脚本中创建一个专栏.最好的方法是什么?还有一种方法可以索引表中的列吗?

我想unique在数据库中强制执行列,而不是仅使用:validate_uniqueness_of.

ruby-on-rails

391
推荐指数
5
解决办法
19万
查看次数

使用Rails 3.1,您在哪里放置"特定于页面"的JavaScript代码?

据我所知,您的所有JavaScript都合并为1个文件.当Rails添加//= require_tree .application.js清单文件的底部时,默认情况下会执行此操作.

这听起来像是一个真正的生命保护程序,但我有点担心特定于页面的JavaScript代码.此代码是否在每个页面上执行?我想要的最后一件事是,只需要在1页上需要为每个页面实例化我的所有对象.

此外,代码是否也存在冲突的可能性?

或者你是否script在页面底部放了一个小标签,只是调用一个执行页面javascript代码的方法?

那你不再需要require.js了吗?

谢谢

编辑:我很感谢所有的答案......我认为他们并没有真正解决问题.其中一些是关于造型而且似乎没有关联...而其他人只是提到javascript_include_tag......我知道存在(显然......)但是看起来Rails 3.1的方式将会包括所有的将您的JavaScript编入1个文件,而不是在每个页面的底部加载单独的JavaScript.

我能想到的最好的解决方案是divids或classes 包装标签中的某些功能.在JavaScript代码,你只要检查idclass在页面上,如果是,您在运行与之相关联的JavaScript代码.这样,如果动态元素不在页面上,则JavaScript代码不会运行 - 即使它已包含在application.js由Sprockets打包的大量文件中.

我的上述解决方案的好处是,如果在100个页面中的8个页面中包含搜索框,则它将仅在这8个页面上运行.您也不必在网站的8个页面上包含相同的代码.实际上,您永远不必在任何地方再次在您的网站上包含手动脚本标记.

我认为这是我问题的实际答案.

javascript ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline

386
推荐指数
11
解决办法
8万
查看次数

Rails I18n验证弃用警告

我刚刚更新到rails 4.0.2并且我收到此警告:

[已弃用] I18n.enforce_available_locales将来默认为true.如果您确实想跳过语言环境的验证,可以设置I18n.enforce_available_locales = false以避免此消息.

将其设置为false是否存在任何安全问题?

ruby ruby-on-rails deprecated rails-i18n ruby-on-rails-4

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

没有路由匹配"/ users/sign_out"设计rails 3

我在我的应用程序上安装了devise并在我的application.html.erb文件中应用了以下内容:

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>
Run Code Online (Sandbox Code Playgroud)

我跑了rake routes并确认所有路线都有效.

另外,在我的routes.rb文件中我有devise_for :usersroot :to => "home#index".

单击"注销"链接时出现以下路由错误:

No route matches "/users/sign_out"
Run Code Online (Sandbox Code Playgroud)

是什么导致错误?

routes ruby-on-rails devise ruby-on-rails-3

385
推荐指数
18
解决办法
12万
查看次数

Postgres无法连接到服务器

在我做了brew更新和brew升级之后,我的postgres遇到了一些问题.我试图卸载postgres并重新安装,但它也没有用.

这是错误消息.(当我尝试执行rake db:migrate时,我也收到此错误消息)

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Mac版:山狮.

自制版:0.9.3

postgres版本:psql(PostgreSQL)9.2.1

这就是我所做的.

12:30 ~/D/works$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.2.1...
12:31 ~/D/works$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.1.4...
12:31 ~/D/works$ psql --version
bash: /usr/local/bin/psql: No such file or directory
12:33 ~/D/works$ brew install postgresql
==> Downloading http://ftp.postgresql.org/pub/source/v9.2.1/postgresql-9.2.1.tar.bz2
Already downloaded: /Library/Caches/Homebrew/postgresql-9.2.1.tar.bz2
......
......
==> Summary
/usr/local/Cellar/postgresql/9.2.1: 2814 files, 38M, built in …
Run Code Online (Sandbox Code Playgroud)

database postgresql macos homebrew ruby-on-rails

384
推荐指数
24
解决办法
27万
查看次数

如何在Rails 3.1中禁用资产管道(链轮)消息的记录?

默认情况下,在Rails 3.1(RC1)下,链接在(dev)日志中往往非常冗长:

Started GET "/assets/application.css" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/application.css.scss  (5ms)  (pid 6303)


Started GET "/assets/application.js" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/default.css.scss  (15ms)  (pid 6303)

...
Started GET "/assets/default/header_bg.gif" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Served asset /default/header_logo.gif - 304 Not Modified  (7ms)  (pid 6303)
Served asset /default/header_bg.gif - 304 Not Modified  (0ms)  (pid 6246)
Served asset /default/footer_bg.gif - 304 Not Modified  (49ms)  (pid 6236)
...
Run Code Online (Sandbox Code Playgroud)

我想降低冗长程度或完全禁用它.我假设有一种干净的方法来禁用或减少日志记录的详细程度,方法是在ActiveRecord SQL语句中添加一个environment.rbdevelopment.rb类似的配置行config.active_record.logger = nil …

ruby-on-rails ruby-on-rails-3 sprockets asset-pipeline rails-sprockets

377
推荐指数
11
解决办法
5万
查看次数

我如何获得Ruby类的名称?

如何从ActiveRecord对象获取类名?

我有:

result = User.find(1)
Run Code Online (Sandbox Code Playgroud)

我试过了:

result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Run Code Online (Sandbox Code Playgroud)

我只需要一个字符串中的类名(User在本例中).有没有办法呢?

我知道这是非常基本的,但我搜索了Rails和Ruby的文档,我找不到它.

ruby ruby-on-rails rails-activerecord

375
推荐指数
4
解决办法
24万
查看次数

Rails update_attributes没有保存?

是否有一个替代update_attributes不保存记录?

所以我可以这样做:

@car = Car.new(:make => 'GMC')
#other processing
@car.update_attributes(:model => 'Sierra', :year => "2012", :looks => "Super Sexy, wanna make love to it")
#other processing
@car.save
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我知道我可以@car.model = 'Sierra',但我想在一条线上更新它们.

ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rails-activerecord

370
推荐指数
4
解决办法
13万
查看次数

如何在Ruby on Rails ActiveRecord迁移中处理太长的索引名称?

我试图添加一个从四个相关表的外键创建的唯一索引:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"],
  :unique => true
Run Code Online (Sandbox Code Playgroud)

数据库对索引名称的限制会导致迁移失败.这是错误消息:

表'研究'上的索引名称'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id'太长; 限制为64个字符

我怎么处理这个?我可以指定不同的索引名称吗?

migration ruby-on-rails

369
推荐指数
7
解决办法
8万
查看次数

条件使用NOT NULL的Rails

使用rails 3样式我怎么写相反的:

Foo.includes(:bar).where(:bars=>{:id=>nil})
Run Code Online (Sandbox Code Playgroud)

我想找到id为非null的地方.我试过了:

Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql
Run Code Online (Sandbox Code Playgroud)

但那回归:

=> "SELECT     \"foos\".* FROM       \"foos\"  WHERE  (\"bars\".\"id\" = 1)"
Run Code Online (Sandbox Code Playgroud)

这绝对不是我需要的,而且几乎看起来像是ARel中的一个错误.

ruby-on-rails arel rails-activerecord

355
推荐指数
5
解决办法
23万
查看次数