我设法让我的本地开发环境变得笨拙.
我所有的本地Rails应用程序现在都给出错误:
PGError
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)
我不知道是什么造成的.
在搜索解决方案时,我更新了所有捆绑的宝石,更新的系统宝石,更新的MacPorts.没有快乐.
其他人在从OSX Leopard升级到Lion时报告了这个问题,因为混淆应该使用哪个版本的Postgres(即OSX版本或MacPorts版本).我已经在Lion运行了几个月,所以现在这应该发生似乎很奇怪.
如果不先了解问题是什么,我就不愿意过多地捣乱.如何有条不紊地调试?
如何确定我的系统中有多少版本的PostgreSQL,正在访问哪一个版本以及它所在的位置?如果使用错误的PostgreSQL,我该如何解决这个问题?
抱歉没有问题.我还在学习它是如何工作的!谢谢你的任何指示.
编辑
一些更新基于以下建议和评论.
我试图运行pg_lsclusters哪个返回command not found错误.
然后我尝试本地化我的pg_hba.conf文件并找到这三个示例文件:
/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample
Run Code Online (Sandbox Code Playgroud)
所以我假设安装了3个版本的PSQL?Macports,OSX默认和???.
然后我搜索了ps -ef | grep postgres返回的launchctl启动脚本
0 56 1 0 11:41AM ?? 0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
500 372 1 0 11:42AM ?? 0:00.17 …Run Code Online (Sandbox Code Playgroud) 我想知道在Rails3中通过has_many显示唯一记录的最佳方式是什么.
我有三个型号:
class User < ActiveRecord::Base
has_many :orders
has_many :products, :through => :orders
end
class Products < ActiveRecord::Base
has_many :orders
has_many :users, :through => :orders
end
class Order < ActiveRecord::Base
belongs_to :user, :counter_cache => true
belongs_to :product, :counter_cache => true
end
Run Code Online (Sandbox Code Playgroud)
假设我想列出客户在其展示页面上订购的所有产品.
他们可能多次订购了一些产品,所以我使用counter_cache以降序排序,根据订单数量显示.
但是,如果他们多次订购产品,我需要确保每个产品只列出一次.
@products = @user.products.ranked(:limit => 10).uniq!
Run Code Online (Sandbox Code Playgroud)
当产品有多个订单记录时有效,但如果产品只订购一次,则会产生错误.(排名是在别处定义的自定义排序函数)
另一种选择是:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Run Code Online (Sandbox Code Playgroud)
我不相信我在这里采取了正确的方法.
有没有其他人解决这个问题?你遇到了什么问题?我在哪里可以找到更多关于.unique之间的区别!和DISTINCT()?
通过has_many,通过关系生成唯一记录列表的最佳方法是什么?
谢谢
我正在将Google Oauth2添加到Rails应用程序中,但无法超越早期阶段.
我已经设置了一个应用程序,并定义了客户端ID和秘密.但我得到了 Invalid parameter value for redirect_uri: Non-public domains not allowed: http://localhost/path/to/callback
这是什么意思?这是因为我正在测试本地开发环境吗?
谢谢你的任何想法.
编辑
这可能是因为应用程序的URI与发送URI不同.但是,当我去谷歌并尝试授权我的开发应用程序的路径时,我得到了OAuth2 redirect is invalid.这是使用本地托管应用程序的限制吗?
编辑2
我生成的请求看起来像这样:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=###########&redirect_uri=http%3A%2F%2Fmyapp.dev%2Fusers%2Fauth%2Fgoogle_oauth2%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&approval_prompt=&access_type=offline
Run Code Online (Sandbox Code Playgroud)
它是否正确.我用client_id尝试了这个,包括并排除了.apps.googleusercontent.com部分.似乎都没有用.
从我读过的关于Rails 5.1新系统规范的所有内容中,我的理解是Rails现在在内部处理数据库事务.
来自Rspec的博客:"[之前]您的测试和您的测试代码无法共享数据库事务,因此您无法使用RSpec的内置机制来回滚数据库更改,而是需要像数据库更清洁的gem.使用系统测试,Rails团队已经做了艰苦的工作以确保不是这种情况,因此您可以安全地使用RSpec的机制,而无需额外的宝石."
我的经历不同:
rails_helper.rb.JS测试现在由于validates uniqueness错误而失败.非JS测试通过.我的测试非常简单.
let(:subject) { page }
let(:user) { create :user, name: "TestUser" }
it "displays the user page", :js do
visit user_path(user)
it is_expected.to have_content "TestUser"
end
Run Code Online (Sandbox Code Playgroud)
数据库清理器禁用,:js => true我得到user named TestUser already exists.随着:js => false测试通过.
系统测试和rspec的当前情况如何?Rails是否在内部处理数据库事务,还是仍需要数据库清理程序?有没有人遇到这个,或者可以指向我相关信息?
使用Ruby我想评估数组中的所有项,如果它们都通过了条件测试,则返回true.
我可以使用例如 array.all? { |value| value == 2 }
所以:
> array=[2,2]
> array.all? { |value| value == 2 }
=> true
> array=[2,3]
> array.all? { |value| value == 2 }
=> false
Run Code Online (Sandbox Code Playgroud)
大!
但是,为什么一个空数组通过了这个测试呢?
> array=[]
> array.all? { |value| value == 2 }
=> true
Run Code Online (Sandbox Code Playgroud)
这不应该是假的吗?
如果我需要它返回false,我应该如何修改方法?
在Rails 3.2应用程序中,我正在尝试添加一个从外部API调用获取其数据的选择字段.此数据作为哈希数组返回:
[{"name"=>"NameA", "id"=>"001"}, {"name"=>"NameB", "id"=>"002"}]
Run Code Online (Sandbox Code Playgroud)
如何使用此数据构建一个类似于以下内容的选择字段:
<select>
<option value="001"> NameA </option>
<option value="002"> NameB </option>
</select>
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢下面的建议,我尝试了以下方法:
A:
<%= select_tag 'model[field]', options_from_collection_for_select(@hash, :id, :name) %>
Run Code Online (Sandbox Code Playgroud)
给出错误:
undefined method `name' for {"name"=>"NameA", "id"=>"001"}:Hash
Run Code Online (Sandbox Code Playgroud)
B:
<%= select_tag 'model[field]', options_from_collection_for_select(@hash) %>
Run Code Online (Sandbox Code Playgroud)
修复错误但生成错误的标记
<option value="{"name"=>"NameA", "id"=>"001"}"> {"name"=>"NameA", "id"=>"001"}</option>
Run Code Online (Sandbox Code Playgroud)
所以我认为我的问题是正确地格式化哈希数组,而且我不太了解如何操作哈希数组来解决这个问题.
除非我完全关注这个方向,否则我认为这个问题的关键是在这个问题的顶部重新格式化数组给出:
{"NameA" =>"001", "NameB" =>"002"}
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?如果是这样,怎么样?
在Rails 3.2应用程序中,我需要访问lib文件中的url_helpers .我正在使用
Rails.application.routes.url_helpers.model_url(model)
Run Code Online (Sandbox Code Playgroud)
但我得到了
ArgumentError (Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true):
Run Code Online (Sandbox Code Playgroud)
我已经找到了一些关于此的内容,但没有真正解释如何在多种环境中解决这个问题.
即我假设我需要在我的development.rb和production.rb文件中添加一些东西,但是什么?
最近我看到建议使用的答案config.action_mailer.default_url_option,但这不适用于动作邮件.
为多个环境设置主机的正确方法是什么?
如果使用Rails 3.1资产管道,调用特定媒体(即打印,屏幕等)css的正确/ rails /最佳实践方法是什么?我知道之前已经问过这个问题,但我看到的所有解决方案看起来都非常糟糕,而不是我所期待的优雅的Rails解决方案.
据我所知,建议的方法是设置stylesheets文件夹,如下所示:
assets
-stylesheets
--application.css
--application-print.css
--print
---custom-print.css
--screen
---custom-screen.css
Run Code Online (Sandbox Code Playgroud)
application.css的内容是
/*
*= require_self
*= require_tree ./screen
*/
Run Code Online (Sandbox Code Playgroud)
application-print.css的内容是
/*
*= require_self
*= require_tree ./print
*/
Run Code Online (Sandbox Code Playgroud)
然后在布局中包含以下内容
<%= stylesheet_link_tag 'application', media = 'screen, projection' %>
<%= stylesheet_link_tag 'application-print', media = 'print' %>
Run Code Online (Sandbox Code Playgroud)
好的,到目前为止一切顺利.
但是,在我的情况下,custom-print.css正在屏幕上应用,并且没有css应用于打印输出.
此外,这种方法似乎影响从css调用的图像.即不是在资产/图像中查找图像,而是在资产/样式表/屏幕中查找图像.这里可能还有其他东西,因为它似乎只是受到影响的javascript css.我会做更多的检查和报告.
所以我的问题是,你如何在Rails资产管道中处理媒体特定的css?什么被认为是最佳实践?我做错了什么?
谢谢你的时间!
在Rails应用程序中,我在模型上有几个整数属性.
用户应该能够创建记录并将这些属性留空.
或者,如果用户输入这些属性的值,则应对其进行数值验证并在一定范围内进行验证.
在模型中,我有类似的东西
validates_presence_of :name
validates_numericality_of :a, :only_integer => true, :message => "can only be whole number."
validates_inclusion_of :a, :in => 1..999, :message => "can only be between 1 and 999."
Run Code Online (Sandbox Code Playgroud)
如果我现在使用所需的最低属性进行测试以保存:
factory :model do
sequence(:name) { |n| "model#{n}" }
end
it "should save with minium attributes" do
@model = FactoryGirl.build(:model)
@model.save.should == false
end
Run Code Online (Sandbox Code Playgroud)
我明白了
Validation failed: a can only be whole number., a can only be between 1 and 999.
Run Code Online (Sandbox Code Playgroud)
如果给出一个值,我怎样才能验证数值和包含:a,而:a在某些情况下仍允许为零?
谢谢
在Rails 3.2应用程序中,我有一个查询定义为返回所有事件项:due_date等于今天.
@due_today = Event.where(:due_date => Time.now.beginning_of_day..Time.now.end_of_day)
Run Code Online (Sandbox Code Playgroud)
我想修改它以返回今天和明天到期的所有事件.
做这个的最好方式是什么?
我知道我有几种选择:
Date.tomorrow
Date.current.tomorrow
Date.now.tomorrow
DateTime.now.tomorrow.to_date
Time.now.tomorrow.to_date
Date.current+1
Run Code Online (Sandbox Code Playgroud)
我确定还有其他人.所有这些都可以互换吗?性能有什么不同吗?是否存在与不同方法相关的问题?我欢迎任何关于哪种方法最好的方法.
额外的荣誉:我还想将:due_date显示为Today HH:MM或Tomorrow HH:MM,其中HH:MM是时间.是否有一种方法可以将Rails显示为今天或明天?或者我需要定义自己的范围?
非常感谢!