我有一个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) 我在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中的排名顺序呢?
我有一个在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) 我在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".如果我能做到,哪种方式最好.
谢谢你的帮助
我知道之前已经提出了类似的问题,但我看到的行为与我在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键时,在事件触发之前会在文本字段中输入实际的选项卡.我想停止这种行为,但是在事件触发之前显然正在输入标签.有办法阻止这个吗?
我有一个角度应用程序,它使用授权逻辑和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) 我希望得到一些帮助解决一个问题,我相信你们中的许多人可以在睡梦中避免.
我有两个关系模式.一个包可以有很多位置,一个位置可以有很多包.如果我的位置模型验证失败(例如,由于位置地址为空),我会得到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) 请原谅这个相对新手的问题,但我可以使用一些帮助.
我已经在我的用户模型上安装了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)
我确信有一个简单的解决方案,但我无法在任何地方找到它.非常感谢帮助.
paperclip ×2
amazon-s3 ×1
angularjs ×1
associations ×1
csrf ×1
devise ×1
facebook ×1
fb-graph ×1
heroku ×1
javascript ×1
jquery ×1
pg-search ×1
registration ×1