假设我们在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 断开连接).
现在我该怎么办:
feature分支,使其提交看起来好像是在D'上面应用的?feature分支,使其提交看起来好像它们被应用在E之上,但是没有单独的"合并分支......"提交(并且C'和D'被重写成C'和D' ")?我有一个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)
但是,它没有.或者也许我做错了什么?
我有一个上传器,允许您上传文件.我想要做的是在您查看其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)
我该如何实现这一目标?
我想通过我们的应用程序(Exvo)向用户提供通过Facebook向邀请页面发送URL的方式向他们的Facebook朋友汇款的能力.
我正在使用"发送"Facebook对话框(重定向到Facebook网站).我正在将用户重定向到的确切URL是(to字段已被编辑):
这给我提供了一个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不会产生任何错误:
只有关于推断属性的警告(我已经在一点上添加了这些,但它没有帮助).
还要注意,偶尔(比如十分之一),当我点击"发送"时,消息就会通过,我看不到任何错误,这使得它更加怪异.
为什么会发生这种错误?我究竟做错了什么?
换句话说,我可以在 Ruby 2.4 上运行 Rails 4.1.16 吗?如果没有,我可以在 Ruby 2.3 上运行它吗?
我有一个具有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) 我的集成测试如下所示:
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).
我怎样才能做到这一点?
采取以下代码(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模型保存到数据库中是不可行的。
ruby ×3
activerecord ×1
carrierwave ×1
facebook ×1
faraday ×1
git ×1
json ×1
oauth ×1
oauth-2.0 ×1
respond-to ×1
rspec ×1
validation ×1