小编Pet*_*xey的帖子

如何在git merge上创建大型消息?

我想做一个git merge将一个分支的工作重新放回另一个分支.

但是,由于已经完成了很多工作并且我要进行非快进合并,我希望提交包含有关合并内容的大量信息.

如果我正在进行正常提交,我可以使用该-m标志,并且编辑器将被激活以便我将详细信息放入(编辑这是不正确的 - 见下文).但是,如果我-m在提交期间使用该标志,它只是告诉我该消息需要内容:

$ git merge development --no-ff -m
error: switch `m' requires a value
Run Code Online (Sandbox Code Playgroud)

由于我有一个相当大的合并消息,我更喜欢编辑器而不是单行字符串.我怎么能得到它呢?

编辑

虽然答案已经涵盖了我的问题,但我意识到-m在正常提交期间使用标志实际上并不启动编辑器(尽管-a如果您正在创建标记).我在正常提交过程中获取编辑器的唯一方法是简单地键入commit没有其他标志或选项.

git

5
推荐指数
2
解决办法
210
查看次数

如何使用Induction连接到本地SQLite数据库?

我正在尝试使用Induction连接到我的本地SQLite数据库,但是我不知道如何建立连接.在以前的SQLite客户端中,我只是打开了数据库文件.

感应连接屏

我应该将哪些属性放入这些领域?我的数据库简单development.db而且位于我的Rails应用程序中

ruby-on-rails induction

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

如何使用ActiveRecord将STI表中的不同类组合成单个结果集?

我们正在构建一个应用程序来创建类似于Facebook的组页面的组页面.有人可以发布到页面,该帖子可以有回复.由于它们具有非常相似的属性,因此将帖子和回复组合到同一个STI表中

class Page < ActiveRecord::Base
  has_many :posts
  has_many :replies, through: :posts
end

class BasePost < ActiveRecord::Base
  ...
end

class Post < BasePost
  belongs_to :page
  ...
end

class Reply < BasePost
  belongs_to :post
  ...
end
Run Code Online (Sandbox Code Playgroud)

我希望能得到 page.posts_and_replies

为了找到页面的"最喜欢的帖子或回复"之类的内容,我们必须将帖子和回复结合起来,以便我们可以获得结果集,例如:

top_messages = page.posts_and_replies.order_by('total_likes DESC').limit(10)
Run Code Online (Sandbox Code Playgroud)

一起获得帖子和回复很棘手

posts_and_replies作为单个结果集进行排序,我们通常需要根据单个连接查询它们:

class Page < ActiveRecord::Base
  has_many :posts
  has_many :replies, through: :posts
  has_many :posts_and_replies, class_name: 'BasePost'
end

# ideally we could then do queries such as
most_recent_messages = @page.posts_and_replies.order('created_at DESC').limit(10)
Run Code Online (Sandbox Code Playgroud)

我们不能这样做,因为page_id只存在posts.'回复'仅通过他们所属的帖子引用该页面.所以这次加入给了我们帖子而不是回复.


可能的解决方案:

归一化数据...... …

activerecord finder-sql sti ruby-on-rails-3.2

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

如何使用RSpec在postgres中设置时间以测试时区行为?

我希望能够跨不同时区测试调度程序组件的行为。但是,触发计划行为的功能在postgres中使用基于时间的查询:

例如

# find reminders which have not been sent for "today" in the local date
Schedule.where('evening_reminder_last_sent_on_local_date != 
                                     DATE( NOW() AT TIME ZONE time_zone )')
Run Code Online (Sandbox Code Playgroud)

我希望能够在RSpec中测试此行为,并确保该行为在一天中可以正确播放,并且如果我在12月25日凌晨1点(UTC)向日本用户发送提醒,然后在UTC晚上10点向他们发送“今天”的提醒,将显示为已发送(因为它是早上7点左右,第二天日本)。

但是,为了做到这一点,我需要能够在postgres中设置日期时间。这可能吗?

请注意...这不是关于浪费Rails的时间

挑战在于不要浪费时间在Rails中-我知道该怎么做。问题是如何在Postgres中设置时间。

postgresql rspec ruby-on-rails

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

是否有一种在Ruby中有条件地添加属性的内联方式?

在Rails中有很多次我希望能够仅在属性具有特定值时才能向某个属性添加属性.

让我给你举个例子.假设我想禁用基于特定属性的按钮,例如check_if_user_can_be_added:

link_to 'Create account', new_user_path, disabled: (user_can_be_added?)
Run Code Online (Sandbox Code Playgroud)

这一切看起来都很好,除了禁用恰好在HTML中应用,无论你给它什么值.如果您给一个按钮属性,disabled: false那么它仍将被禁用.

我需要的

# if the button is disabled
link_to 'Create account', new_user_path, disabled: true

# if the button is not disabled
link_to 'Create account', new_user_path
Run Code Online (Sandbox Code Playgroud)

我可以看到这样做的方式

获得这个意味着您需要一个类似于以下的解决方案,首先设置选项哈希,然后将其传递给:

options = user_can_be_added? ? {disabled: true} : {}
link_to 'Create account', new_user_path, options
Run Code Online (Sandbox Code Playgroud)

我想这样做的方式......

这不起作用,但相信Ruby的美丽,我怀疑那里有类似的东西.这基本上就是我想要做的

link_to 'Create account', new_user_path, ({disabled: true} if user_can_be_added?)
Run Code Online (Sandbox Code Playgroud)

我可以这样做,是否有一些使用splat运算符的东西让我在那里......?

html ruby ruby-on-rails

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

您可以在Rails服务器上为Angular应用生成路由而无需重复逻辑吗?

我们已经有了Angular路由和Angular路由应用程序。但是,我们需要做一些事情,例如通过电子邮件或通过Twitter发送链接。这些必须在需要在服务器端生成路由的服务器上完成

这意味着我们需要复制当前包含在Angular路由文件中的路由逻辑和路径帮助程序,或者找到一种方法来解析服务器上的Angular路由文件,然后生成ruby path_helper方法。

有没有简单的方法可以做到这一点-一些Rails插件或类似工具?

编辑(以澄清)

我需要能够生成服务器上和cron作业期间页面的链接。如果这是一个Rails应用程序,我将能够使用路径助手edit_user_path @user

问题在于路由的逻辑现在在Angular中。因此,无法在导轨侧生成路径。我需要一些方法来做到这一点。无法从客户端完成此操作,因为客户端将不存在-可以从cron作业中激活

routing ruby-on-rails angularjs

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

"更新"的"Rails方式"从根本上是有缺陷的吗?

我故意以一种煽动性的方式提出这个问题,因为我担心自己会遗漏一些东西.

用于处理模型更新的Rails方法如下:

class UsersController < ApplicationController
  ...
  def update
    @current_user = load_user
    if @current_user.update_attributes params[:user]
      redirect_to success_path
    else
      render :edit
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这一切都很好,除非您在表单提交不正确时最终得到一个奇怪的URL:

编辑用户

你发现自己在路上:

users/:user_id/edit
Run Code Online (Sandbox Code Playgroud)

提交不验证的编辑后

即你需要修复表单中的输入并重新提交:

users/:user_id
Run Code Online (Sandbox Code Playgroud)

提交完成验证的编辑后

success_path
Run Code Online (Sandbox Code Playgroud)

为什么你应该只是因为表单有错误而在不同的URL上呢?


问题...

你正在做同样的事情,但现在你正在使用不同的URL.这有点奇怪.

事实上坦率地说,这感觉不对.您正在使用未正确验证的表单,因此已重新加载.你应该继续/users/:user_id/edit.如果你已经完成了JS验证,那就是.

此外,如果你的导航中有任何"当前选择的"逻辑,那么你实际上在视觉上是错误的,因为正确的导航项不再突出显示 - 它看起来像你在用户个人资料页面上.

routing ruby-on-rails crud

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

有没有办法访问 Cancan 嵌套资源能力中的父对象?

我有一个嵌套资源,我正在使用 Cancan 对其进行授权。我需要能够访问父对象才能授权子对象的:index操作(因为没有为:index操作传递子实例)。

# memberships_controller.rb
class MembershipsController < ApplicationController
  ...
  load_and_authorize_resource :org
  load_and_authorize_resource :membership, through: :org
  ..
end
Run Code Online (Sandbox Code Playgroud)

能力.rb

can [:read, :write], Membership do |membership|
  membership.org.has_member? user
end
Run Code Online (Sandbox Code Playgroud)

这不适用于 :index 操作

不幸的是,索引操作没有任何关联的成员资格实例,因此您无法通过备份来检查权限。

为了检查权限,我需要询问父对象(组织)并询问它当前用户是否是成员,例如

# ability.rb
...
can :index, Membership, org: { self.has_member? user }
Run Code Online (Sandbox Code Playgroud)

Cancan 几乎让我这样做...

Cancan 声明您可以使用以下机制访问父母的属性:https : //github.com/ryanb/cancan/wiki/Nested-Resources#wiki-accessing-parent-in-ability

# in Ability
can :manage, Task, :project => { :user_id => user.id }
Run Code Online (Sandbox Code Playgroud)

然而,这只是通过比较对我的情况不起作用的属性来工作。

我怎样才能访问父对象本身?

有没有办法在权限内访问父对象本身?

ruby-on-rails cancan

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

将 Postgres 连接池大小设置得太高有什么风险?

我正在使用 Sidekiq 并行运行大量作业,其中许多作业无法连接到数据库,因为我的连接池大小只有 5。

我想将其提高到 15(至少在本地主机上),但想知道这可能会带来什么负面后果。

设置为 Ruby on Rails,默认池大小为 5。

postgresql ruby-on-rails

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

您需要对 Rails 做什么才能使规范文件与它们描述的代码一起存在?

多年来,我一直遵循 Rails 惯例,将规范文件放在规范文件夹中,并与它们描述的代码完全分开:

- app
  - controllers
    - application_controller.rb
  - models
    - user.rb
- spec
  - controllers
    - application_controller_spec.rb
  - models
    - user_spec.rb
Run Code Online (Sandbox Code Playgroud)

然而,这种方法可能会带来很多不必要的错位和混乱,我真的很喜欢 Angular 将组件、它们的规范和代码并排放置的方法。在从事过大型 Rails 项目后,规范和代码之间的错位会变得令人难以置信的混乱和迷失方向。

需要进行哪些更改才能实现这一目标?

我想尝试在 rails 中做同样的事情,并将规范移动到他们描述的文件旁边,以便目录结构更类似于:

- app
  - controllers
    - application_controller.rb
    - application_controller_spec.rb
  - models
    - user.rb
    - user_spec.rb
Run Code Online (Sandbox Code Playgroud)

我需要改变哪些事情才能使这项工作发挥作用?

想到的几件事是:

  • 确保 Zeitwerk 不会在应用加载时将规范文件加载到内存中
  • 调整守卫,使其监视正确的目录

不过,我还需要什么其他东西,有什么需要特别注意的吗?

architecture ruby-on-rails

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