目前我正在开发一个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基本身份验证标头并提供加密的用户名:密码组合.
在安装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
).
所以我有一个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:当我问这个问题时,我显然没有想到.使用请求发送标头并不意味着我会在响应中收到它们.
所以现在的问题是:如何测试请求标头而不将其与响应一起发回?
我不知道它什么时候发生但是我收到了这个错误 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 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不是很熟悉:)
刚刚从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)
关于这个的任何提示?
提前致谢!
在我们公司,我们正在从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
,修正错误,然后把它合并到develop
和master
分支机构.合并到master
获取标记v8.0.1
.
由于两件事,我似乎有些奇怪:
master
时间表的样子v7.0.0 --> v8.0.0 --> v9.0.0 --> v8.0.1 --> v10.0.0
.我完全知道这是可能的,但是它也可以接受吗?hotfix
到master
(并且master
在那一刻v9.0.0
)并用它标记时v8.0.1
,我是否也获得介于v8.0.0
和之间的功能v9.0.0
?提前致谢!
devise ×2
ruby ×2
sinatra ×2
activeadmin ×1
api ×1
git ×1
git-branch ×1
git-flow ×1
heroku ×1
rack ×1
rest ×1
rspec ×1
rvm ×1
versioning ×1
warden ×1