小编Paw*_*cki的帖子

合并/重新绑定Git中的"断开连接"分支

假设我们在Git中有以下情况:

      X---Y feature
     /
A---B---C---D edge
Run Code Online (Sandbox Code Playgroud)

现在我重新edge修改分支,稍微更改B提交(使用edit),所以它现在看起来像这样:

      X---Y feature

A---E---C'---D' edge
Run Code Online (Sandbox Code Playgroud)

C'和D'是与C和D相同的提交,但是应用于E的顶部(并注意到feature分支内的X 断开连接).

现在我该怎么办:

  1. 重新绑定/合并feature分支,使其提交看起来好像是在D'上面应用的?
  2. 重新绑定/合并feature分支,使其提交看起来好像它们被应用在E之上,但是没有单独的"合并分支......"提交(并且C'和D'被重写成C'和D' ")?

git branching-and-merging

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

在RSpec中存根/模拟全局常量

我有一个gem,它有一个根据Rails.env采取不同行为的方法:

def self.env
  if defined?(Rails)
    Rails.env
  elsif ...
Run Code Online (Sandbox Code Playgroud)

现在我想编写一个测试代码路径的规范.目前我这样做:

Kernel.const_set(:Rails, nil)
Rails.should_receive(:env).and_return('production')
...
Run Code Online (Sandbox Code Playgroud)

没关系,只是觉得难看.另一种方法是声明spec_helper:

module Rails; end
Run Code Online (Sandbox Code Playgroud)

它也有效.但也许有更好的方法?理想情况下,这应该工作:

rails = double('Rails')
rails.should_receive(:env).and_return('production')
Run Code Online (Sandbox Code Playgroud)

但是,它没有.或者也许我做错了什么?

ruby rspec

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

Rails从show动作下载文件?

我有一个上传器,允许您上传文件.我想要做的是在您查看其show动作时触发文档的下载.网址将是这样的:

/documents/16
Run Code Online (Sandbox Code Playgroud)

该文档可以是.txt或.doc.

到目前为止,我的show动作看起来像这样:

  def show
    @document = Document.find(params[:id])
    respond_with(@document) do |format|
      format.html do
        render layout: false, text: @document.name
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

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

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

带有API的Facebook发送对话框错误代码:100('链接'无效)

我想通过我们的应用程序(Exvo)向用户提供通过Facebook向邀请页面发送URL的方式向他们的Facebook朋友汇款的能力.

我正在使用"发送"Facebook对话框(重定向到Facebook网站).我正在将用户重定向到的确切URL是(to字段已被编辑):

https://www.facebook.com/dialog/send?app_id=637466739616439&description=You+can+create+an+Exvo+Account+to+accept+this+money+transfer.&display=page&link=https%3A%2F% 2Fwww.exvo.com%2Finvitations%2F9fb77bda665f0ae8f58843daec80a29b&名称= Pawe%C5%82 +转到%C5%9Bcicki +会+喜欢+到+送+你+ 0.01 + EUR&图片= HTTPS%3A%2F%2Fthemes.exvo.com%2Fstylesheets% 2Fimages%2Fcustom_images%2Flogo.png&REDIRECT_URI = HTTPS%3A%2F%2Fwww.exvo.com&到=用户名

这给我提供了一个Facebook'发送'对话框.当我输入自定义消息并按"发送"时,我出现此错误:

API Error Code: 100
API Error Description: Invalid parameter
Error Message: 'link' is invalid.
Run Code Online (Sandbox Code Playgroud)

链接参数(从上面的URL中提取并解码)是这样的:

https://www.exvo.com/invitations/9fb77bda665f0ae8f58843daec80a29b
Run Code Online (Sandbox Code Playgroud)

这是一个有效的URL,返回正确的200响应.使用Facebook调试器,我可以看到提供的URL不会产生任何错误:

https://developers.facebook.com/tools/debug/og/object?q=https%3A%2F%2Fwww.exvo.com%2Finvitations%2F9fb77bda665f0ae8f58843daec80a29b

只有关于推断属性的警告(我已经在一点上添加了这些,但它没有帮助).

还要注意,偶尔(比如十分之一),当我点击"发送"时,消息就会通过,我看不到任何错误,这使得它更加怪异.

为什么会发生这种错误?我究竟做错了什么?

facebook

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

Rails v4.1.16 支持的最高 Ruby 版本是多少?

换句话说,我可以在 Ruby 2.4 上运行 Rails 4.1.16 吗?如果没有,我可以在 Ruby 2.3 上运行它吗?

ruby ruby-on-rails ruby-on-rails-4

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

如果rails中的控制器中有if语句,我在哪里放置respond_to?

我有一个具有if条件的控制器:

  def update
    @contact_email = ContactEmail.find(params[:id])

    if @contact_email.update_attributes(params[:contact_email])
      flash[:notice] = "Successfully updated contact email."
      redirect_to @contact_email
    else
      render :action => 'edit'
    end
  end
Run Code Online (Sandbox Code Playgroud)

我在哪里放置respond_to块:

respond_to do |format| 
  format.html {}
  format.json {render :json =>@contact_email}
end
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails respond-to

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

与Faraday和Omniauth的Rails集成测试

我的集成测试如下所示:

class OAuthTest < ActionDispatch::IntegrationTest
  ...

  @client = OAuth2::Client.new(                                                
    client_id,                                              
    client_secret,                                          
    { :site => 'https://provider', :token_url => '/oauth/access_token' }
  )                                                                            

  @client.connection.build do |b|                                              
    b.adapter :action_dispatch, self
  end                                                                          

  access_token = @client.auth_code.get_token(...)
  access_token.get("/user.json")
Run Code Online (Sandbox Code Playgroud)

使用法拉第0.7.6它工作正常,action_dispatch适配器将http请求路由到我的Rails应用程序(调用users_controller).但是在Faraday 0.8.0的情况下,action_dispatch适配器被替换为rack(请参阅https://github.com/technoweenie/faraday/pull/134),我无法使其正常工作.

我想我需要将上面的代码更改为:

@client.connection.build do |b|      
  b.adapter :rack, self.app          
end                                  
Run Code Online (Sandbox Code Playgroud)

但是它在Rack(1.2.5)没有期待一个Stream,但它获得了一个Hash并undefined read method for Hash在第149行说道(这里:https://github.com/rack/rack/blob/1.2.5/lib/rack/request .rb#L149).

我怎样才能做到这一点?

ruby ruby-on-rails oauth oauth-2.0 faraday

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

validates_presence_of和未保存的关联

采取以下代码(Rails 3.0.10):

User < AR
  has_many :providers

Provider < AR
  belongs_to :user
  validates_presence_of :user

user = User.new
user.providers.build
# so both models not yet saved but associated with each other

user.valid?
=> false

user.errors
=> {:providers=>["is invalid"]}

user.providers.first.errors
=> {:user_id=>["can't be blank"]}
Run Code Online (Sandbox Code Playgroud)

提供程序为什么看不到它尚未保存的关联用户模型可用?或者换句话说-我该如何处理以便使验证仍然存在?也许我做错了什么?

请注意,我正在寻找一个干净的解决方案,因此建议在Provider模型中进行验证前回调,以将User模型保存到数据库中是不可行的。

validation activerecord ruby-on-rails ruby-on-rails-3

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