小编Iva*_*van的帖子

REST方式检查/取消选中喜欢/不喜欢/不喜欢的资源

目前我正在开发一个API,并且在该API中我希望已签名的用户能够喜欢/不喜欢或喜欢/不喜欢两个资源.

我的"Like"模型(它是Ruby on Rails 3应用程序)是多态的,属于两种不同的资源:

/api/v1/resource-a/:id/likes
Run Code Online (Sandbox Code Playgroud)

/api/v1/resource-a/:resource_a_id/resource-b/:id/likes
Run Code Online (Sandbox Code Playgroud)

问题是:我不知道如何选择尽可能使我的资源成为RESTful.我已经尝试了以下两种方法在我的URL中实现like/different结构:

案例A :(喜欢/不同于"资源"的成员)

PUT /api/v1/resource/:id/like maps to Api::V1::ResourceController#like
PUT /api/v1/resource/:id/unlike maps to Api::V1::ResourceController#unlike
Run Code Online (Sandbox Code Playgroud)

和案例B :("喜欢"是它自己的资源)

POST /api/v1/resource/:id/likes maps to Api::V1::LikesController#create
DELETE /api/v1/resource/:id/likes maps to Api::V1::LikesController#destroy
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都有一个用户会话,所以在删除/"unliking"时我不必提及相应的"like"-record的id.

我想知道你们是如何实施此类案件的!

更新2011年4月15日:使用"会话"我的意思是与每个请求一起发送HTTP基本身份验证标头并提供加密的用户名:密码组合.

api rest ruby-on-rails-3

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

使用RVM安装时找不到Rails命令行

在安装RVM之后,我安装了Ruby 1.8.7然后安装了Rails 3.当我这样做时,which rails我得到了/Users/davidbenhamou/.rvm/gems/ruby-1.8.7-p302/bin/rails.但是,当我这样做rails -v,我得到-bash: /usr/bin/rails: No such file or directory

为什么Rails不工作?注意:我已经完成了从RVM网站和Ruby命令行工作的所有步骤(ruby -v).

ruby ruby-on-rails rvm

8
推荐指数
2
解决办法
9599
查看次数

如何在Sinatra中使用rspec和rack-test测试头文件

所以我有一个Sinatra应用程序,通过来自其他服务的HTTP POST接收XML.我想在本地测试它.我有一个测试XML文件,我发送到端点.这很顺利.我还设置了一些像这样的标题:

post '/', xml, 'HTTP_X_MY_AWESOME_HEADER' => "It's value"
Run Code Online (Sandbox Code Playgroud)

其中xml是发送到我的端点的普通XML的确切副本.但我作为参数传递的标题永远不会显示在输出中.

我在这里做错了吗?这里有很多关于它的帖子,但都过时了.

我正在使用Rspec 2.8,Sinatra 1.3.2,Ruby 1.9.3-p0,Rack :: Test 0.6.1.

更新2012-01-28 11:37:当我问这个问题时,我显然没有想到.使用请求发送标头并不意味着我会在响应中收到它们.

所以现在的问题是:如何测试请求标头而不将其与响应一起发回?

rack rspec sinatra

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

Heroku,Devise:获取'NoMethodError(未定义的方法`to_key'for:user:Symbol)'

我不知道它什么时候发生但是我收到了这个错误 NoMethodError (undefined method 'to_key' for :user:Symbol)

此行为仅发生在Heroku Cedar堆栈上.我使用Devise(1.4.2)通过Facebook在Rails 3.1.0.rc6和ruby 1.9.2-p290上进行身份验证.它发生在线上sign_in_and_redirect(:user, authentication.user).这是我的方法:

def create
  omniauth = request.env['omniauth.auth']    

  authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])


  if !authentication.nil?
    flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: omniauth['provider'])

    sign_in_and_redirect(:user, authentication.user)
  elsif current_user
    current_user.authentications.create!(provider: omniauth['provider'], uid: omniauth['uid'])
    redirect_to profile_path, notice: I18n.t('devise.omniauth_callbacks.success', kind: omniauth['provider'])
  else
    user = User.new
    user.apply_omniauth(omniauth)
    if user.save
      flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: omniauth['provider'])
      sign_in_and_redirect(:user, user)
    else
      session[:omniauth] = omniauth.except('extra')
      redirect_to new_user_registration_url
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby authentication heroku devise ruby-on-rails-3

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

Sinatra Warden使用现有的Ruby on Rails应用程序,使用Devise

我试图拆分我目前的Ruby on Rails 3 Web应用程序和它的Web服务(API).我的Web应用程序在Heroku上运行,并在我的应用程序中将API实现为命名空间路由.例如,/events返回HTML页面并/api/v1/events返回JSON数据.

根据一些最佳实践,我想将它们分成两个不同的应用程序.我选择了Sinatra来实现API应用程序.它现在适用于不需要身份验证的简单请求.

我的Ruby on Rails 3应用程序正在使用Devise来验证用户身份.还可以使用Facebook帐户登录.现在我想要实现的是使用Warden通过我的基于Sinatra的API对用户进行HTTP基本身份验证(包括注册).

最好的方法是什么?或者也许我可以使用与Warden不同的东西?

请记住,我对Rack不是很熟悉:)

authentication sinatra devise warden ruby-on-rails-3

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

ActiveAdmin的未定义变量或方法'params'

刚刚从rails-3-1分支安装了Rails 3.1 rc5和ActiveAdmin.安装顺利,我看到登录表单.但是,当我使用提供的用户名/密码登录时,我收到以下错误:

ActionView::Template::Error (undefined local variable or method `params'
      for #<ActiveAdmin::Views::Pages::Dashboard:0x00000001a59b00>):
    1: render view_factory.dashboard_page
Run Code Online (Sandbox Code Playgroud)

关于这个的任何提示?

提前致谢!

ruby-on-rails ruby-on-rails-3.1 activeadmin

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

使用成功的Git分支模型支持多个版本

在我们公司,我们正在从SvN转移到Git(是的,迟到总比没有好).有了这个,我们也尝试简化版本控制过程.为此,我发现了一篇有趣的文章:Vincent Driessen成功的Git分支模型.

据我所知,开发人员假设是线性版本.要明确:

v1.0.0 --> v1.0.1 --> v1.0.2 --> v1.1.0 --> v1.1.1 etc
Run Code Online (Sandbox Code Playgroud)

未提及对旧版本的支持.例如:我们支持最多三个主要版本,因为一些客户端不想升级.所以想象我们有以下版本:

v7.0.0 --> v8.0.0 --> v9.0.0 --> v10.0.0
Run Code Online (Sandbox Code Playgroud)

当有发现了一个严重错误v8.0.0 释放v9.0.0,我们取出一个标签v8.0.0,修正错误,然后把它合并到developmaster分支机构.合并到master获取标记v8.0.1.

由于两件事,我似乎有些奇怪:

  1. master时间表的样子v7.0.0 --> v8.0.0 --> v9.0.0 --> v8.0.1 --> v10.0.0.我完全知道这是可能的,但是它也可以接受吗?
  2. 当我合并hotfixmaster(并且master在那一刻v9.0.0)并用它标记时v8.0.1,我是否也获得介于v8.0.0和之间的功能v9.0.0

提前致谢!

versioning git branching-and-merging git-flow git-branch

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