小编pej*_*ohn的帖子

在Rails应用程序中进行JSON API调用

我们已经部署了Wordpress实例并安装了JSON API插件

使用此插件,您可以进行简单的HTTP GET请求,例如:

http://www.example.org/?json=get_recent_posts
http://www.example.org/?json=get_post&post_id=47
http://www.example.org/?json=get_tag_posts&tag_slug=banana
Run Code Online (Sandbox Code Playgroud)

并在JSON中回复:

{
"status": "ok",
"count": 1,
"count_total": 1,
"pages": 1,
"posts": [
{...}}
Run Code Online (Sandbox Code Playgroud)

我的问题是我应该如何在我的Rails应用程序中进行这些类型的请求(然后解析返回的JSON).我刚开始只是从头开始写东西,但我想有一些好的现有工具来管理这样的东西.基本上,当Ruby-wrapper尚未可用时,我从未尝试过连接到API.你能帮助一个菜鸟如何开始?

api json ruby-on-rails wordpress-plugin

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

用于correct_user和admin的多个before_filter语句

我有一个Group资源,我正在尝试使用适当的授权进行设置.

我试图实现的授权逻辑是这样的:

  1. 只有小组成员才能查看他们的小组.
  2. 管理员可以查看任何组,也可以执行其他操作.

我正在尝试使用组控制器中的以下before_filter语句执行此操作:

before_filter :signed_in_user
before_filter :correct_user, only: :show
before_filter :admin_user, only: [:show, :index, :edit, :update, :destroy]
Run Code Online (Sandbox Code Playgroud)

Correct_user工作,因为我已经验证只有组成员可以查看他们的组.但是,我想要发生的是使用admin:show子句来覆盖它,以便管理员可以查看任何组.目前这是行不通的.我猜我的滤镜排序和选项有问题.

谁能告诉我哪里出错了?

编辑

根据Amar的请求添加我的方法代码:

private

def correct_user
  # User has to be a member to view
  @group = Group.find(params[:id])
  redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil?
end

def admin_user
  redirect_to(root_path) unless current_user.admin?
end
Run Code Online (Sandbox Code Playgroud)

authorization ruby-on-rails before-filter role-base-authorization

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

为什么 Chrome 会以新窗口为目标自动关闭指向我网站的链接?

我真的很难过这一点,所以如果有人能提供线索,我真的很感激。

这是我的网站(内置导轨):http : //floating-autumn-3174.herokuapp.com/

当有人试图通过 Facebook 或 Twitter 上的链接访问该网站时,基本上会加载一个新标签,但随后会立即关闭。这只发生在 Chrome 中。在 Firefox 中工作得很好。

如果我右键单击该链接,然后选择“在新选项卡中打开”,则加载正常。

如果我右键单击并复制链接,它就可以正常工作。

我认为这可能与 SSL 重定向有关,但我使用我的登台环境(无 SSL)进行了测试,它运行良好。

所以基本上这种自动关闭只发生在 Chrome 和点击加载新标签的链接时。

任何线索发生了什么或我如何才能更好地解决这个问题?

编辑

好的,在查看了我们包含的 javascript 之后,我相信我已经找到了问题所在。它涉及一些我们用来处理弹出窗口的 JS。首先让我解释一下我们正在尝试做什么。我们通过 Facebook 进行身份验证。当用户单击“通过 Facebook 登录”时,将启动一个弹出窗口并进行身份验证。成功后,弹出窗口关闭,主窗口以登录状态刷新。这一切正常,但我意识到弹出窗口关闭代码正在杀死所有其他新窗口。这是下面的完整代码片段:

function popupCenter(url, width, height, name) {
 var left = (screen.width/2)-(width/2);
 var top = (screen.height/2)-(height/2);
 return window.open(url, name,     "menubar=no,toolbar=no,status=no,width="+width+",height="+height+",toolbar=no,left="+left+",top="+top);
}

$(document).ready(function(){
$("a.popup").click(function(e) {
popupCenter($(this).attr("href"), $(this).attr("data-width"), $(this).attr("data-height"), "authPopup");
e.stopPropagation(); return false;
});


if(window.opener) {
 window.opener.location.reload(true);
 window.close()
}
});
Run Code Online (Sandbox Code Playgroud)

最后一个 if 语句是我认为导致问题的原因。我是一个严肃的 JS 菜鸟,所以我不知道如何解决这个问题。基本上,如果链接用于弹出窗口,我只希望最后一个条件触发。我怎么能这样做呢?再次感谢所有的帮助。

编辑 2

我继续下面 Rob 的回答,并认为它有效,但实际上遇到了一个我希望得到帮助的边缘情况。显然,当用户第一次通过 Facebook …

https redirect google-chrome http

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

将 Javascript 中的当前时间传递给 GraphQL AWSDateTime 列

我有一个Channel带有dateOn类型列的GraphQL 表AWSDateTime

在我的 React 应用程序中,我调用了一个 mutation 来创建一个新的Channel. 这是相关的代码:

const createChannel = `
mutation createChannel {
  createChannel(input:{
    title:"${title}"
    dateOn:${Date.now()}
    slug: "${slug}"
    authorId: "${authorId}"
  }) {
    id title slug authorId
  }
}
`;
Run Code Online (Sandbox Code Playgroud)

AWS 接受以下格式的日期时间字符串:

The AWSDateTime scalar type represents a valid extended ISO 8601 DateTime string. In other words, this scalar type accepts datetime strings of the form YYYY-MM-DDThh:mm:ss.sssZ

我将如何在 Javascript 中以这种格式传递当前时间?

javascript graphql aws-amplify

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

从数组中提取多个键值属性

我有一个类似于你在这篇帖子底部看到的数组(具体来说,它是从fb_graph返回的fb朋友列表).

如果我想通过这个哈希并从每个记录中选择'identifier'属性,我知道我可以这样做:

@fb_friends.map &:identifier  # returns ["123", "134",...]
Run Code Online (Sandbox Code Playgroud)

我的问题是如果我想从每条记录中挑选出多个属性.基本上我想抓住标识符,名称和图片.天真我想做点什么:

@fb_friends.map &:identifier, :name, :picture
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.知道如何解决这个问题吗?

[#<FbGraph::User:0x007f9ec1fd63c8 @identifier="1868", @endpoint="https://graph.facebook.com /----",  @access_token="AAAFGzU8vU0gBAEK2q3WYEUJNZAczuO6UPOLqbscwvZALr1gW1ePBqpyarh0uTv6alA2YyNvIzZBcvvIBEYy4i5ulMJZCpWcZD", @cached_collections={}, @name="REMOVED", @first_name=nil, @middle_name=nil, @last_name=nil, @gender=nil, @locale=nil, @languages=[], @link=nil, @username=nil, @third_party_id=nil, @timezone=nil, @verified=nil, @about=nil, @bio=nil, @education=[], @email=nil, @interested_in=[], @political=nil, @favorite_teams=[], @quotes=nil, @relationship_status=nil, @religion=nil, @relationship=nil, @website=nil, @work=[], @sports=[], @favorite_athletes=[], @inspirational_people=[], @mobile_phone=nil, @installed=nil>, #<FbGraph::User:0x007f9ec1fda9f0 @identifier="3??1", @endpoint="https://graph.facebook.com/----", @access_token="AAAFGzU8vU0gBAEK2q3WYEUJNZAczuO6UPOLqbscwvZALr1gW1ePBqpyarh0uTv6alA2YyNvIzZBcvvIBEYy4i5ulMJZCpWcZD", @cached_collections={}, @name="Removed", @first_name=nil, @middle_name=nil, @last_name=nil, @gender=nil, @locale=nil, @languages=[], @link=nil, @username=nil, @third_party_id=nil, @timezone=nil, @verified=nil, @about=nil, @bio=nil, @education=[], @email=nil, @interested_in=[], @political=nil, @favorite_teams=[], @quotes=nil, @relationship_status=nil, @religion=nil, @relationship=nil, @website=nil, @work=[], …
Run Code Online (Sandbox Code Playgroud)

ruby hash ruby-on-rails

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

Rails&Memcached:优化多个提取

我正在构建一个iPhone应用程序的Rails后端.

在分析我的应用程序之后,我发现以下调用在性能方面特别昂贵:

@messages.as_json
Run Code Online (Sandbox Code Playgroud)

此调用返回大约30个消息对象,每个消息对象包含许多子记录.如您所见,单个消息json响应可能会组成许多DB调用:

  def as_json(options={})

     super(:only => [...],
      :include => {
        :user => {...},
        :checkin => {...}
                     }},
        :likes => {:only => [...],
                      :include => { :user => {...] }}},
        :comments => {:only => [...],
                                    :include => { :user => {:only => [...] }}}
                   },
      :methods => :top_highlight)
  end
Run Code Online (Sandbox Code Playgroud)

平均来说,@messages.as_json呼叫(所有30个对象)需要近1100毫秒.

想要优化我已经使用了memcached.使用下面的解决方案,当我的所有消息对象都在缓存中时,平均响应现在是200-300ms.我对此很满意,但我遇到的问题是,这使缓存未命中的情况更加缓慢.如果缓存中没有任何内容,则现在需要超过2000毫秒进行计算.

   # Note: @messages has the 30 message objects in it, but none of the child records have been grabbed

    @messages.each_with_index do |m, i|
      @messages[i] = Rails.cache.fetch("message/#{m.id}/#{m.updated_at.to_i}") …
Run Code Online (Sandbox Code Playgroud)

memcached json caching ruby-on-rails dalli

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

为什么window.location.reload()否定了上一个命令?

我在javascript中发出HTTP POST/DELETE请求以删除我的rails应用中的消息

 $.post(message_url, { _method: 'delete' }, null, "script");
Run Code Online (Sandbox Code Playgroud)

如果我在执行此行后在页面上刷新浏览器,则会看到该消息实际上已被删除且不再显示.

现在我希望页面在此命令后自动刷新,以便用户看到它消失了.我有以下几行:

    $.post(message_url, { _method: 'delete' }, null, "script");
    window.location.reload();
Run Code Online (Sandbox Code Playgroud)

现在页面确实刷新了但消息不再被删除.我在控制台中没有看到任何错误.

所以基本上没有这个reload(); 命令消息删除就好了,但是如果我添加这个reload()行就会停止工作.为什么会这样?

更重要的是,我怎么能完成我想要做的事情?

javascript ruby-on-rails-3

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

Redis-RB开箱即用,在本地抛出ECONNREFUSED错误

我添加gem 'redis'到我的Gemfile中.跑bundle install.重新启动本地服务器,然后仅在我的控制台中运行hello world示例以获取错误.知道什么是错的吗?

[kudo (develop)]$ rails console
Loading development environment (Rails 3.2.3)
1.9.3p125 :001 > redis = Redis.new
=> #<Redis client v3.0.2 for redis://127.0.0.1:6379/0> 
1.9.3p125 :002 > redis.set("mykey", "hello world")
Redis::CannotConnectError: Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED)
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:268:in `rescue in establish_connection'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:263:in `establish_connection'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:69:in `connect'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:282:in `ensure_connected'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:173:in `block in process'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:248:in `logging'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:172:in `process'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis/client.rb:84:in `call'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis.rb:608:in `block in set'
from /Users/pejman/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/redis-3.0.2/lib/redis.rb:36:in `block in …
Run Code Online (Sandbox Code Playgroud)

ruby redis ruby-on-rails-3

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

Ruby正则表达式:区分iOS Safari和iOS Chrome

根据以下文档:https://developers.google.com/chrome/mobile/docs/user-agent

这是Chrome for iOS UA字符串:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3
Run Code Online (Sandbox Code Playgroud)

这里是iOS UA字符串的Safari:

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3
Run Code Online (Sandbox Code Playgroud)

尽管我可以说明未来的不同之处将是Chrome包含"CriOS".我希望能够区分这两个浏览器,并因此设置使用正则表达式.

使用:

/Gecko\) (?!CriOS)/
Run Code Online (Sandbox Code Playgroud)

我能做到这一点,但我是偏执狂,因为我不在表达式中包含iPhone(也许这也会在Android上触发等)

我想编写以下正则表达式,在以下情况下返回匹配:

  1. 该字符串包含"iPhone"
  2. 该字符串不包含"CriOS"

我该怎么做呢?

仅供参考我一直在使用rubular来测试reg exp,它非常棒http://rubular.com/

ruby regex user-agent ruby-on-rails

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