小编dee*_*our的帖子

加入的范围:has_many:通过关联

class Users < ActiveRecord::Base
  has_many :meetings, :through => :meeting_participations
  has_many :meeting_participations
end

class Meetings < ActiveRecord::Base
  has_many :users, :through => :meeting_participations
  has_many :meeting_participations
end

class MeetingParticipations < ActiveRecord::Base
  belongs_to :user
  belongs_to :meeting

  scope :hidden, where(:hidden => true)
  scope :visible, where(:hidden => false)
end
Run Code Online (Sandbox Code Playgroud)

hidden是m2m关联表中的额外布尔列.举个Users例子current_user,我想做

current_user.meetings.visible
Run Code Online (Sandbox Code Playgroud)

这将检索Meetings用户是hidden列所属参与者的集合false.我得到的最接近的是在Meetings课堂上添加以下范围

scope :visible, joins(:meeting_participations) & MeetingParticipation.visible
Run Code Online (Sandbox Code Playgroud)

scope不过滤MeetingsMeetingParticipations表,但没有对加入/条件MeetingParticipations相关的表current_user.

这个问题是,如果current_user并且another_user都是某个 …

ruby-on-rails ruby-on-rails-3

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

登录delayed_job?

我无法获得任何日志输出delayed_job,我不确定我的工作是否正在开始.

这是我的Procfile:

web:     bundle exec rails server
worker:  bundle exec rake jobs:work
worker:  bundle exec clockwork app/clock.rb
Run Code Online (Sandbox Code Playgroud)

这是工作:

class ScanningJob
  def perform
    logger.info "logging from delayed_job"
  end

  def after(job)
    Rails.logger.info "logging from after delayed_job"
  end
end
Run Code Online (Sandbox Code Playgroud)

我看到发条输出到系统输出,我可以看到工作程序执行器启动,但我从未看到我的日志语句命中.我也试过puts无济于事.

我的时钟文件非常简单:

every(3.seconds, 'refreshlistings') { Delayed::Job.enqueue ScanningJob.new }
Run Code Online (Sandbox Code Playgroud)

我只是想看到这个工作,缺乏记录意味着我不能.这里发生了什么?

ruby logging ruby-on-rails delayed-job clockwork

40
推荐指数
1
解决办法
3万
查看次数

我应该在哪里组织特定于主机的文件/模板?

我正在尝试根据目录布局结构来组织我的剧本.该文档似乎没有针对特定于主机的文件/模板的建议.

我有2个播放单个网站

  • example.com-provision.yml
  • example.com-deploy.yml

这些文件位于我的结构的根目录中.配置手册仅包括其他角色

---
- hosts: example.com

  roles:
    - common
    - application
    - database

  become: true
  become_method: su
  become_user: root
Run Code Online (Sandbox Code Playgroud)

部署手册不包含角色,但有自己的部分varstasks部分.我有一对夫妇templatecopy任务,并想知道什么"最佳实践"是从哪里把这个目录结构中的这些主机特定的模板/文件.

现在我把它们放在./roles/example.com/templates/./roles/example.com/files/,但是需要从我的部署手册中引用文件的完整路径,比如

- name: deployment | copy httpd config
  template:
    src: ./roles/example.com/templates/{{ host }}.conf.j2
    # ...
Run Code Online (Sandbox Code Playgroud)

代替

- name: deployment | copy httpd config
  template:
    src: {{ host }}.conf.j2
    # ...
Run Code Online (Sandbox Code Playgroud)

ansible

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

在Rails中,如何以可与ActiveSupport :: TimeZone [zone] .parse()一起使用的格式获取当前时区(Time.zone)?

一个方法如何获取当前的Time.zone并将其放入可用的格式ActiveSupport::TimeZone[some_zone].parse()

Time.zone.to_s返回一个不能用的字符串似乎很奇怪 ActiveSupport::TimeZone[zone].parse()

Time.zone.to_s 回报 "(GMT-08:00) Pacific Time (US & Canada)"

不过ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]nil.

ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]
=> nil

ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
=> (GMT-08:00) Pacific Time (US & Canada)
Run Code Online (Sandbox Code Playgroud)

timezone ruby-on-rails

27
推荐指数
1
解决办法
3万
查看次数

如何观察当前路线的变化?

我想<title>在位置(路线)发生变化时更新页面的标签.我对观察App.Router当前路径更改特别感兴趣- 然后我想访问与该路由关联的View,并<title>根据View的属性更新观察者的标签.

例如,如果去 /about

  1. 我该如何设置要观察的观察者?我很难找到currentState属性或等同物来观察.
  2. 在Observer中,如何访问App.AboutView与路由关联的?

我正在使用 1.0.0pre4


我的目标是在Observer on 将使用的每个View上拥有一个title属性和一个authorization属性currentPath.我想使用该title属性来更新document.title,并使用authorization属性对象来检查当前用户是否可以访问该路由.

现在我说这个和@Michael Grassotti的答案,也许这些属性属于Controller而不是View.目标是访问与当前Route的上下文关联的这些属性,以修改document.title并检查我App.CurrentUserController (存储User登录用户的对象模型)是否被授权访问当前路由.

ember.js ember-router

15
推荐指数
2
解决办法
9954
查看次数

Rails:仅当另一个字段存在时才验证字段

我有一个模型,其中有两个字段在技术上可以为null.字段名称是:is_activated:activated_at.:activated_at仅在:is_activated设置为时才需要true.如果:is_activated是,则不需要存在false.Rails将此验证直接设置为ActiveRecord的适当方法是什么?

ruby validation activerecord ruby-on-rails

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

Sublime Text subl快捷方式不起作用:ln:/ Users/edmundmai/bin/subl:没有这样的文件或目录

嗨,我正在尝试设置sublime文本2(subl)的终端快捷方式,但它不起作用.我按照https://github.com/mhartl/rails_tutorial_sublime_text/blob/master/README.md上的说明操作,但无法完成第一步.

当我输入:

ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/subl
Run Code Online (Sandbox Code Playgroud)

我收到错误

ln: /Users/edmundmai/bin/subl: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

sublimetext2

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

让rails-api和strong_parameters一起工作

包括时

gem 'strong_parameters'
gem 'rails-api'
Run Code Online (Sandbox Code Playgroud)

在一起的我Gemfile,呼吁params.require

private
  def user_params
    params.require(:user).permit(:first_name, :last_name)
  end
Run Code Online (Sandbox Code Playgroud)

require()通话中出现以下错误失败.

TypeError:
   can't convert Symbol into String
Run Code Online (Sandbox Code Playgroud)

回溯显示strong_parameters' ActionController::StrongParameters' require()方法永远不会被击中.

ruby-on-rails rails-api strong-parameters

10
推荐指数
2
解决办法
4914
查看次数

ActiveRecord,has_many:through,与STI的多态关联

ActiveRecord,has_many:through和Polymorphic Associations中,OP的示例请求忽略可能的超类AlienPerson (SentientBeing).这是我的问题所在.

class Widget < ActiveRecord::Base
  has_many :widget_groupings

  has_many :people, :through => :widget_groupings, :source => :person, :source_type => 'Person'
  has_many :aliens, :through => :widget_groupings, :source => :alien, :source_type => 'Alien'
end

SentientBeing < ActiveRecord::Base
  has_many :widget_groupings, :as => grouper
  has_many :widgets, :through => :widget_groupings
end


class Person < SentientBeing
end

class Alien < SentientBeing
end
Run Code Online (Sandbox Code Playgroud)

在这个修改过的例子中grouper_type,Alien和的值Person现在都被Rails存储为SentientBeing (Rails为这个grouper_type值寻找基类).

在这种情况下,修改has_many's in …

ruby-on-rails ruby-on-rails-3

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

解决由lodash的partialRight创建的部分函数的未设置“ length”属性

我正在使用MomentTimezone在浏览器中进行时间操作。

我也使用TypeScript和Lodash

accountTimezonewindow包含通过身份验证的用户的首选时区上有一些设置。我正在尝试创建一个辅助方法localMoment(),该方法将接受的许多签名中的moment.tz()任何一个,并将其附加window.accountTimezone为最终timezone: string参数。

似乎partialRight是我在寻找什么。

const localMoment = partialRight(moment.tz, window.accountTimezone);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题与lodash文档中的此注释有关:

注意:此方法不会设置部分应用的函数的“长度”属性。

具体来说,对于像这样的调用localMoment('2019-08-01 12:00:00'),TypeScript抱怨localMoment()提供了1个参数,但期望为零。

如何避免TypeScript高兴地理解localMoment()应该moment.tz()通过MomentTimzone接口调用的调用,同时又避免了因使用而造成的混淆partialRight()


我考虑过使用这种方法作为替代方法,但不知道如何键入...args以保持TypeScript满意。

const localMoment = (...args): Moment => moment.tz(...args, window.accountTimezone);
Run Code Online (Sandbox Code Playgroud)

javascript typescript lodash

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