小编Al *_*l D的帖子

基于关联属性的Rails查询记录

我正在尝试根据关联记录的属性创建查询,但失败了

我有以下模型:

class CompanyPay < ActiveRecord::Base
  has_many :ee_pay
  has_many :pay, :through => :ee_pay 
end

class EePay < ActiveRecord::Base
  belongs_to :company_pay
  has_many :pay
end

class Pay < ActiveRecord::Base
  belongs_to :ee_pay
  has_one :company_pay, :through => :ee_pay
end
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个查询,该查询返回所有apply_paye关联的CompanyPay上属性为的Pay对象true。

从昨天开始,我一直在努力寻找连接,作用域,lambda等,但是在这个阶段我只是让自己更加困惑。

我想要的查询将是这样,但我只是不知道如何正确表达

@records = Pay.where(employee_id: current_employee.id, {|p| p.company_pay.apply_paye == true}).order(:id)
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗。我可以写一个单行查询吗?我应该使用联接吗?应该使用lambda吗?

谢谢看

编辑1

我已经编辑了原始帖子,因为我错误地输入了错误的属性名称(应该apply_paye不是taxable)。

尝试了fylooi提供的以下查询

@records = Pay.joins(:ee_pay => :company_pay).where(:pay => {:employee_id => current_employee.id }, :company_pay => {:apply_paye => true})
Run Code Online (Sandbox Code Playgroud)

但是出现以下错误:

    ActiveRecord::StatementInvalid in PayLinesController#update

    PG::UndefinedTable: ERROR: …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

6
推荐指数
1
解决办法
3374
查看次数

pg_dump从远程服务器到localhost

大家好,任何人都可以帮我从远程AWS服务器上的postgreSQL数据库转储到本地机器上的postgreSQL数据库.

我一直在尝试使用这个堆栈帖子中的答案,但它一直在失败.

我正在使用的命令是

pg_dump -C -h ssh ubuntu@ec2-59-16-143-85.eu-west-1.compute.amazonaws.com -U dev_user paycloud_dev | psql -h localhost -U dev_user paycloud_dev
Run Code Online (Sandbox Code Playgroud)

但我一直在收到错误

pg_dump: too many command-line arguments (first is "paycloud_dev")
Run Code Online (Sandbox Code Playgroud)

无法弄清楚我做错了什么

只是添加,dev_user是我在本地机器和远程服务器上的postgreSQL中设置的角色.paycloud_dev是两个数据库的名称(所有者是dev_user)

编辑1

根据由于某种原因已被删除的帖子尝试下面的命令

pg_dump -C -h ec2-59-16-143-85.eu-west-1.compute.amazonaws.com -U dev_user paycloud_dev | psql -h localhost -U dev_user paycloud_dev 
Run Code Online (Sandbox Code Playgroud)

现在这给了我错误

pg_dump: [archiver (db)] connection to database "paycloud_dev" failed: could not connect to server: Connection refused
Is the server running on host "ec2-59-16-143-85.eu-west-1.compute.amazonaws.com" (59.16.143.85) and accepting
TCP/IP …
Run Code Online (Sandbox Code Playgroud)

postgresql ssh pg-dump

5
推荐指数
1
解决办法
9930
查看次数

Rails 分配会话变量

嗨,我在过去 8 个月里一直在研究 Rails,所以我并没有真正理解很多事情。我已经看到并使用了设置 current_user 等的辅助方法,现在我正在尝试复制类似的东西。

我正在尝试为用户所在的当前公司在应用程序控制器中设置一个全局值。我知道我做错了,但我无法弄清楚如何解决它,即使我正在接近它正确。我想要这样当用户点击公司时,全局变量被设置为他们所在公司的 id。然后在任何其他子模型中,如果我想要公司的信息,我使用全局变量来检索具有该 ID 的公司对象。

导致问题的代码位于application.html.erb 的导航栏中

<li><%= link_to "Company", company_path, :method => :get %></li>
Run Code Online (Sandbox Code Playgroud)

当我使用公司控制器等时,这有效。但是当我尝试使用任何其他控制器时,我收到错误

员工中的 ActionController::UrlGenerationError#index

No route matches {:action=>"show", :controller=>"companies"} missing required keys: [:id] 
Run Code Online (Sandbox Code Playgroud)

据我了解,这意味着它无法呈现网址,因为没有传递公司 ID 参数?

我试图破解我在另一个项目中使用的辅助方法(用于获取 current_user),但意识到它使用会话来提取 user.id 以返回用户对象。这是我对application_controller.rb中的辅助方法的尝试

def current_company
  @company = Company.find_by_id(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

我无法从会话中获取当前公司,因此除非公司 ID 作为参数传递,否则我上面的方法是无用的。

我想过在每个子模型方法上传递公司 ID,但是

  1. 我不是 100% 确定如何做到这一点
  2. 听起来效率不高

所以我的问题是我是否正确地处理了这个问题?最好的方法是什么?我可以创建一个辅助方法来存储全局公司 id 变量,一旦用户访问公司,该变量就会被设置,然后可以被其他模型检索吗?

我可能没有很好地解释它,所以如果您需要澄清或更多信息,请告诉我。谢谢你看。

编辑 1

进行了 Ruby Racer 建议的更改,现在我有:

应用程序.html.erb

 <%unless current_page?(root_path)||current_page?(companies_path)||current_company.nil? %>

   <li><%= link_to "Company", company_path, :method => :get %></li> …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

2
推荐指数
1
解决办法
9346
查看次数

识别Sublime Text 3代码段源代码

有谁知道我如何识别Sublime Text 3代码片段的来源?Rails有一个我认为来自某个包的东西.我已经卸载了所说的软件包,但代码片段仍可供使用.这让我疯了

sublimetext3 sublimetext-snippet

1
推荐指数
1
解决办法
179
查看次数