Questions tagged «ruby-on-rails»

Ruby on Rails是一个用Ruby编写的开源全栈Web应用程序框架。它遵循流行的MVC框架模型,并以其“配置之上的约定”方法进行应用程序开发而闻名。

15
复合主键与唯一对象ID字段
我继承了一个数据库,该数据库的构想是复合键比使用唯一对象ID字段更理想,并且在构建数据库时,永远不要将单个唯一ID用作主键。因为我正在为此数据库构建一个Rails前端,所以遇到使它符合Rails约定的困难(尽管可以使用自定义视图和一些其他gem来处理复合键)。 编写此特定架构设计背后的原因与编写数据库的方式有关,这与数据库如何以非有效方式处理ID字段以及在构建索引时树型排序有缺陷。这种解释没有任何深度,我仍在尝试围绕这个概念(我熟悉使用复合键,但并非100%的时间)。 任何人都可以对此主题发表意见或增加深度吗?

7
Rails 3.1,RSpec:测试模型验证
我从在Rails中使用TDD开始了我的旅程,遇到了一个关于模型验证测试的小问题,我似乎找不到解决方案。假设我有一个用户模型, class User < ActiveRecord::Base validates :username, :presence => true end 和一个简单的测试 it "should require a username" do User.new(:username => "").should_not be_valid end 这样可以正确测试状态验证,但是如果我想更具体些怎么办?例如,在错误对象上测试full_messages。 it "should require a username" do user = User.create(:username => "") user.errors[:username].should ~= /can't be blank/ end 我对最初尝试(使用should_not be_valid)的担心是RSpec不会产生描述性错误消息。它只是说“预期有效?返回假,就成真”。但是,第二个测试示例有一个较小的缺点:它使用create方法而不是new方法来获取错误对象。 我希望我的测试可以更具体地说明他们正在测试的内容,但同时不必接触数据库。 有人有意见吗?

13
getaddrinfo:提供的节点名或服务名,或者未知
我有一个Ruby on Rails应用程序,正在部署在运行Mac OS X 10.6的计算机上。出现问题的代码是由delay_job运行的。仅当它通过delay_job运行时,才会出现此问题。如果我在控制台(rails console production)中运行它,或者直接通过cURL调用API,它就可以正常工作。而且,整个过程在我的开发环境中都可以正常工作。 基本上,代码在一个地方工作,但是由于某种原因,它在必须工作的地方失败。我已经搜索并找到了一些资源,但是没有任何建议适用或有所作为。当我登录服务器并运行命令时,一切正常。但是由于某些原因,当Capistrano运行/启动它们时,它不起作用。 任何帮助是极大的赞赏。 重要笔记: Ruby版本:1.9.2-p0 Rails版本:3.0.1 delay_job版本:最新(来自collectionidea / delayed_job) 其余客户端版本:1.6.1 码: class CallApi < Struct.new(:num) def perform log "Entering perform" apinum = num || 5 log "ApiNum = #{apinum}" results = attempt(2,10) do ActiveSupport::JSON.decode(RestClient.get(API_URL, {:params => {:apinum => apinum}})) end log "Results retrieved. …


4
更新一列,所有行
我在表中添加了新列,但忘记添加:default选项。现在,我想在每一行上填充该列。 有使用控制台的方法吗?我过去一个小时一直在搜索google,但找不到任何内容。 我知道如何针对单个对象而不是针对模型中的所有对象。Foo.find(1).update_attribute(:myattribute,'value')

3
两个页面加载时仍保留Rails Flash消息
我在Rails应用程序中使用Flash通知,其代码如下: flash[:notice] = "Sorry, we weren't able to log you in with those details." render :action => :new Flash消息将按预期的方式在“新”操作中呈现,但随后还会在用户访问的下一页(无论可能是什么)上显示该消息。它应该只显示一次,但是有一些东西使它停留在周围。

4
生成迁移-创建联接表
我经历了许多期待SO和google职位产生连接表的迁移has many and belongs to many协会并没有什么工作。 所有解决方案都生成一个空的迁移文件。 我正在使用rails 3.2.13,我有两个表:security_users和assignments。这些是我尝试过的一些事情: rails generate migration assignments_security_users rails generate migration create_assignments_security_users rails generate migration create_assignments_security_users_join_table rails g migration create_join_table :products, :categories (following the official documentation) rails generate migration security_users_assignments security_user:belongs_to assignments:belongs_to 谁能说出如何在两个表之间创建联接表迁移?

8
作用域与:has_many:through关联的连接
class Users < ActiveRecord::Base has_many :meetings, :through => :meeting_participations has_many :meeting_participations end class Meetings < ActiveRecord::Base has_many :users, :through => :meeting_participations has_many :meeting_participations end class MeetingParticipations < ActiveRecord::Base belongs_to :user belongs_to :meeting scope :hidden, where(:hidden => true) scope :visible, where(:hidden => false) end hidden是m2m关联表中的一个额外的布尔列。鉴于某些Users情况current_user,我想做 current_user.meetings.visible 它将检索Meetings该hidden列所在的用户是其参与者的集合false。我得到的最接近的是将以下范围添加到Meetings类中 scope :visible, joins(:meeting_participations) & …


4
通过link_to在ruby上传递参数
我有这行代码: <%= link_to "Add to cart", :controller => "car", :action => "add_to_cart", :car => car %> 当我在add_to_cart方法中...我该怎么称呼:car? @car = Car.new(params[:car]) 那是行不通的,因为它说我正在尝试将其字符串化。 我不明白这是怎么回事。因为我使用它来创建新用户,并且效果很好。 顺便说一句,汽车是我的汽车目标。

4
Rails has_many:通过在联接模型中按附加属性查找
对于Ruby和Rails来说都是新手,但是我现在受过教育(这显然没有任何意义,哈哈)。 我有两个模型,Event和User通过表EventUser加入 class User < ActiveRecord::Base has_many :event_users has_many :events, :through => :event_users end class EventUser < ActiveRecord::Base belongs_to :event belongs_to :user #For clarity's sake, EventUser also has a boolean column "active", among others end class Event < ActiveRecord::Base has_many :event_users has_many :users, :through => :event_users end 这个项目是一个日历,在其中我必须跟踪人们注册并为给定事件划掉他们的名字。我认为多对多是一种好方法,但是我不能做这样的事情: u = …

4
Rails 3 /不带模型的表单:如何创建不与模型绑定的表单?
我有一个模型,并且有一个视图,该视图显示用于基于该模型创建新对象的表单。我们称该表格为Form1。 用户提交后Form1,即创建了对象。然后,我想在下一页上显示第二个表单Form2,该表单要求用户在将对象保存到数据库之前检查各种选项。 我的问题可能是非常基本的。我不知道如何创建Form2,因为它不直接与模型绑定。因为我是Rails新手,所以我只创建了以下表格: form_for(@object) { |f| ... } @object 是从模型实例化的对象 问题:我不认为这种代码可以满足我的目的。Form2考虑到它一定不能基于@object或@object模型,我该如何创建? 我的应用中的一些细节: 该站点Form1在重定向到OAuth服务器之前接受值()。 当用户在OAuth服务器上验证其凭据时,她将被重定向回我的站点。一个XML-RPC请求,然后获取关于用户的账户上的信息OAuth服务器。 该XML响应可能表明该用户在该帐户上只有一个帐户OAuth服务器。如果是这样,将从中检索一些值XML并将其添加到对象(然后(最终)保存在数据库中),然后将用户重定向到成功页面。 但是,如果XML响应指示用户在OAuth服务器上有多个帐户,则我想显示一个表格(Form2),该表格允许用户选择OAuth服务器上的哪些帐户与我的网站相关联。因此,Form2真正询问用户要创建多少个对象,而不是询问对象的特定属性。

9
PostgreSQL GROUP BY与MySQL不同吗?
我一直在将一些MySQL查询迁移到PostgreSQL以使用Heroku。我的大多数查询工作正常,但是当使用group by时,我仍然遇到类似的重复错误: 错误:“ XYZ”列必须出现在GROUP BY子句中或在聚合函数中使用 有人可以告诉我我在做什么错吗? 可以100%运行的MySQL: SELECT `availables`.* FROM `availables` INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24') GROUP BY availables.bookdate ORDER BY availables.updated_at PostgreSQL错误: ActiveRecord :: StatementInvalid:PG错误:错误:列“ availables.id”必须出现在GROUP BY子句中或在聚合函数中使用: SELECT“ availables”。* FROM“ availables” INNER JOIN“ rooms” ON“ rooms”。 id …

9
红宝石调试与Ruby 1.9.3?
我刚刚更新到Ruby 1.9.3p0和Rails 3.1.1。现在,当我尝试启动服务器时,它抱怨我应该安装ruby-debug,即使它已经安装了。 % rails server --environment=development --debug => Booting WEBrick => Rails 3.1.0 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug' Exiting …

3
这个Rails JSON身份验证API(使用Devise)是否安全?
我的Rails应用程序使用Devise进行身份验证。它有一个姐妹iOS应用程序,用户可以使用与该Web应用程序相同的凭据登录到iOS应用程序。所以我需要某种API进行身份验证。 这里有许多类似的问题指向本教程,但它似乎token_authenticatable已过时,因为此模块已从Devise中删除,并且某些行会引发错误。(我使用的是Devise 3.2.2。)我曾尝试根据该教程(和本教程)来推出自己的教程,但我对此并不百分百自信-我觉得可能有些东西被误解或错过。 首先,按照这个要点的建议,我authentication_token在users表中添加了text属性,以下内容添加到user.rb: before_save :ensure_authentication_token def ensure_authentication_token if authentication_token.blank? self.authentication_token = generate_authentication_token end end private def generate_authentication_token loop do token = Devise.friendly_token break token unless User.find_by(authentication_token: token) end end 然后,我有以下控制器: api_controller.rb class ApiController < ApplicationController respond_to :json skip_before_filter :authenticate_user! protected def user_params params[:user].permit(:email, :password, :password_confirmation) end end (请注意,我application_controller有一行before_filter :authenticate_user!。) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.