小编chu*_*k w的帖子

Paperclip gem触发CSRF令牌验证问题

我有一个Rails 3.1应用程序,它使用了paperclip gem(v 3.4.0).简而言之.我有一个故事模型和一个帖子模型.一个故事可以有很多帖子.

#story.rb

class Story < ActiveRecord::Base

  attr_accessible :title, :user_id, :username, :posts_attributes

  belongs_to    :user
  has_many      :posts, :dependent  =>  :destroy,
                      :order => "created_at DESC"

  accepts_nested_attributes_for :posts, :reject_if => lambda { |t| t['contents'].nil? }

end
Run Code Online (Sandbox Code Playgroud)
#post.rb

class Post < ActiveRecord::Base

  attr_accessible :contents, :photo, :dimensions

  belongs_to    :story, :touch => true
  belongs_to    :user, :touch => true

  has_attached_file :photo, 
                    :styles => { 
                      :medium => { :geometry => "400x400>" },
                      :thumb => { :geometry => "100x100>" },
                    },
                    :processors => [:thumbnail],
                    :storage => :s3, …
Run Code Online (Sandbox Code Playgroud)

csrf paperclip ruby-on-rails-3 ruby-on-rails-3.1

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

如何删除查询结果的排名

我在stories.rb模型上有以下pg_search范围:

  pg_search_scope   :with_text, 
                    :against => :title, 
                    :using => { :tsearch => { :dictionary => "english" }},
                    :associated_against => { :posts => :contents }
Run Code Online (Sandbox Code Playgroud)

我希望查询返回忽略任何排名的结果(我只关心故事最后更新的日期顺序DESC).我知道这对于大多数查看它的人来说都是一个简单的问题,但是如何关闭pg_search中的排名顺序呢?

pg-search

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

Facebook墙贴错误:OAuthException ::(#1500)您提供的网址无效

我有一个在Heroku上运行的基于Web的新闻应用程序.当用户在我的应用上发布评论到新闻报道时,我的应用将评论转发到用户的Facebook墙上fb_graph.几周之前,一切都运转良好.我无法解释我现在看到一些令人困惑的行为.

现在,当用户向故事提交评论时,FB API会响应,OAuthException :: (#1500) The url you supplied is invalid.如果同一个用户然后向同一个故事提交其他评论,则这些评论会被发布到用户的FB Feed中.

我使用FB Graph API资源管理器确认我有有效的访问权限,并且我的应用程序确实接受了令牌所有者的FB源的帖子.

为了让事情更令人费解,当在localhost上开发我的web应用程序时,所有帖子都可以通过我的开发FB应用程序完成.

def post_to_facebook(story, post) 
  auth = Authentication.find_by_provider_and_user_id("facebook", current_user.id)
  if auth
    me = FbGraph::User.me(auth.token)
    if me.permissions.include?(:publish_stream)
      begin
        me.feed!(
          :message => "#{best_name(current_user)} made the following post to NewsWick: #{post.contents}", 
          :name => story.title,
          :link => "https://www.newswick.com/stories/"+story.id.to_s,
          :description => "Story posted to the NewsWick world-wide news service" ,
          :picture => best_photo(story)[:photo_url]
          )
      rescue => e
        @msg = "Facebook posting error: "+ e.to_s
        puts "Facebook feed …
Run Code Online (Sandbox Code Playgroud)

facebook heroku facebook-graph-api fb-graph

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

在s3上设置mp4文件的内容类型

我在paperclip gem和s3存储的帮助下将用户上传的视频添加到我的RoRs站点.由于某种原因,我无法弄清楚,每当用户上传mp4文件时,s3都会为该文件设置内容类型application/mp4而不是video/mp4.

请注意,我在初始化文件中注册了mp4 mime类型:

Mime::Type.lookup_by_extension('mp4').to_s => "video/mp4"

这是我的Post模型的相关部分:

  has_attached_file :video, 
                :storage => :s3,
                :s3_credentials => "#{Rails.root.to_s}/config/s3.yml",
                :path => "/video/:id/:filename"

  validates_attachment_content_type :video,
     :content_type => ['video/mp4'],
     :message => "Sorry, this site currently only supports MP4 video"
Run Code Online (Sandbox Code Playgroud)

我的回形针和/或s3设置中缺少什么.

####更新#####

由于某些原因,我不知道Rails,我的mp4包含文件的默认mime类型如下:

    MIME::Types.type_for("my_video.mp4").to_s
 => "[application/mp4, audio/mp4, video/mp4, video/vnd.objectvideo]" 
Run Code Online (Sandbox Code Playgroud)

因此,当回形针将mp4文件发送到s3时,它似乎将文件的mime类型识别为第一个默认值"application/mp4".这就是为什么s3将文件标识为具有"application/mp4"的内容类型的原因.因为我想启用这些mp4文件的流媒体,我需要使用回形针将文件识别为具有mime类型的"video/mp4".

有没有办法修改回形针(可能在before_post_process过滤器中)以允许这样做,或者有没有办法通过init文件修改rails以将mp4文件识别为"video/mp4".如果我能做到,哪种方式最好.

谢谢你的帮助

ruby-on-rails amazon-s3 paperclip

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

在Chrome中的textarea中单击Tab键时,使用preventDefault()

我知道之前已经提出了类似的问题,但我看到的行为与我在SO上找到的行为略有不同.

我有一个表格,我正在分解成几个jquery手风琴标签.我希望用户能够填写选项卡1下的文本字段,然后键入选项卡键以自动打开选项卡2并将焦点放在该选项卡中的文本字段中.我遇到的问题是阻止Chrome中的默认选项卡键控行为.

$("form#new_story").keydown(function (e) {
    if(!e) var e = window.event;
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) {
        e.preventDefault();
        alert("tab was keyed");
    }
});
Run Code Online (Sandbox Code Playgroud)

我在Chrome,FF和Safari中测试了这个.在FF和Safari中运行良好,但是当使用Chrome键的用户按下Tab键时,在事件触发之前会在文本字段中输入实际的选项卡.我想停止这种行为,但是在事件触发之前显然正在输入标签.有办法阻止这个吗?

javascript jquery google-chrome

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

如何在执行ui-router解析之前推迟StateChangeStart事件

我有一个角度应用程序,它使用授权逻辑和ui-router来禁止未经授权的用户访问某些状态/视图.我遵循监听stateChange事件的标准方法,该事件触发我的授权逻辑.这一切都很好,直到可怕的页面重新加载.

我将会话数据(包括授权状态)存储在本地存储中,以便在页面重新加载时,我可以使用ui-router中的父状态在尝试更改视图之前首先从本地存储中解析/获取授权状态.这是我的app父状态对象的配置:

$stateProvider.
state('app', {
  url: '/app',
  abstract: true,
  controller: 'appCtrl',
  data: {
    authorizedRoles: [USER_ROLES.all]
  },
  templateUrl: 'partials/app.html',
  resolve: {

    //Try to restore from the previous session before loading any of the app child states
    RestoredSession: ['SessionService',
             function(SessionService){
                return SessionService.restoreSession();
              }]
  }
})

...various app. child states
Run Code Online (Sandbox Code Playgroud)

这是我的onStateChange监听器:

//listen for a ui.router $stateChangeStart event and test the new path to see if the currentUser
//is authorized to view that page

.run(         ['$rootScope', 'AUTH_EVENTS', 'SessionService', 
  function ($rootScope,   AUTH_EVENTS,   SessionService) …
Run Code Online (Sandbox Code Playgroud)

angularjs angular-ui-router

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

如何捕获/解决ActiveRecord:保存构建的关联时导致的RecordInvalid异常

我希望得到一些帮助解决一个问题,我相信你们中的许多人可以在睡梦中避免.

我有两个关系模式.一个包可以有很多位置,一个位置可以有很多包.如果我的位置模型验证失败(例如,由于位置地址为空),我会得到anActiveRecord:RecordInvalid异常.我知道我收到此错误,因为当我调用package.save时,rails会自动调用save!在位置关联.

我不确定如何避免错误或至少挽救错误.你们中的任何人都有关于如何解决问题和Rails最佳实践的任何好建议吗?

这是代码:'

def create
    @package = current_user.package.build(params[:package])
    package_location
    if @package.save
      flash[:success] = "Package created!"
      redirect_to root_path
    else        
      render 'pages/home'
    end
  end

  def package_location
    gps_processing if !session[:gps_aware]
    @package.locations.build(:address => session[:address])
  end

  def gps_processing
    session[:address] = [params[:story][:street_address], params[:story][:city], params[:story][:state], params[:story][:country]].compact.join(', ')
  end

class Package< ActiveRecord::Base

  belongs_to :user
  has_and_belongs_to_many :locations

  validates         :content,   :presence   => true, 
                    :length     => {:maximum => 140}
  validates      :user_id,    :presence => true

  default_scope :order => 'package.created_at DESC'

end

class Location < ActiveRecord::Base

  attr_accessible :lng, :lat, :address

  validates     :lng, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails associations google-geocoder ruby-on-rails-3

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

使用Devise编辑User时,为什么要使用User的当前密码预填充新密码字段,以及如何覆盖

请原谅这个相对新手的问题,但我可以使用一些帮助.

我已经在我的用户模型上安装了Devise Gem,只对Devise视图进行了少量更改,并且没有对控制器进行任何更改.不过,我遇到了一个我无法解决的问题.

帐户/编辑网址(我使用'devise_for:users,:path =>"accounts"'定义了路径)按预期显示用户编辑表单.但是,插入新密码的字段预填充了用户的当前密码(当然,type = password).我不希望这个字段预先填充任何内容.因此,每当表单呈现时,我都希望该字段为空白.我在设计/注册/编辑视图中尝试了以下更改,但它没有用空字符串替换预填充密码,就像我希望的那样:

<p><span style = "font-weight:bold; padding:0"><%= f.label "New Password" %></span><br />
<%= f.password_field :password, :value => ""%>
  <i>(just leave this blank if you don't want to change your current password)</i></p>
Run Code Online (Sandbox Code Playgroud)

我确信有一个简单的解决方案,但我无法在任何地方找到它.非常感谢帮助.

ruby-on-rails registration devise

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