小编Ton*_*ony的帖子

在Ruby on Rails中创建对象时,您更喜欢哪种保存方法,为什么?

在Ruby on Rails应用程序中为对象编写"create"方法时,我使用了两种方法.我想使用一种方法,以便更清晰,更一致的代码.我将列出以下两种方法.有人知道一个人比另一个好吗?如果是这样,为什么?

方法1:

def create1
  # is this unsecure? should we grab user_id from the session
  params[:venue]['user_id'] = params[:user_id]

  begin
    venue = Venue.create(params[:venue])
    @user_venues = @user.venues
    render :partial => 'venue_select_box', :success => true, :status => :ok
  rescue ActiveRecord::RecordInvalid
    render :text => 'Put errors in here', :success => false, :status => :unprocessable_entity
  end
end
Run Code Online (Sandbox Code Playgroud)

方法2:

def create2
   # is this unsecure? should we grab user_id from the session
  params[:venue]['user_id'] = params[:user_id]

  venue = Venue.new(params[:venue])
  if venue.save
    @user_venues = @user.venues
    render …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails rescue

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

Rails has_and_belongs_to_many让我对固定装置和工厂感到困惑

一般混乱
我有乐队可以有3种类型.我在之前的SO文章中读到,处理这个问题的正确方法是几个步骤:

1)在band.rb

has_and_belongs_to_many :genres
Run Code Online (Sandbox Code Playgroud)

2)创建band_genres连接表

即使阅读了文档后,我对HABTM的实际含义感到有些困惑.我想我通常会认为"一个乐队有很多类型",没有并且属于很多.因此,对此的快速DUMBED解释将是伟大的.

与夹具混淆

另外,当我为band_genres做夹具时,我有

{ 
  "The Reaper Band and Funk": { "band": "The Reaper Band", "genre": "Funk" },
  "The Reaper Band and Rock": { "band": "The Reaper Band", "genre": "Rock" }  
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个"未知"的乐队专栏.我认为rails应该知道"The Reaper Band"会指一个乐队乐队的乐队(当然是同名)并且会抓住那个id并且知道这个乐器中的"band"会引用连接表中的band_id .我宁愿我的灯具看起来像硬编码的数字.

与工厂混淆

当我在工厂创建一个乐队时,我想指定它的类型:

Factory.define :band do |f|
  f.sequence(:name) { |n| "Band#{n}" }
  f.mailing_lists { |mailing_lists| [mailing_lists.association(:mailing_list)] }
  f.genres 2
end
Run Code Online (Sandbox Code Playgroud)

我在这里意识到我可能需要一个硬编码的genre_id.但是为什么rails不看那个并说"哦,他想把id = 2的类型添加到band_genres表".

我不期待铁路为我处理所有肮脏的工作,但我确实想按照规则行事.

ruby-on-rails fixtures has-and-belongs-to-many factories

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

如果我切换到原始SQL查询,我的Rails查询开始变得复杂?你是做什么?

我的Rails应用程序开始需要复杂的查询.我应该开始使用原始SQL查询吗?Rails社区的趋势是什么?

更新:

我现在没有书面查询,我想在开始之前问这个问题.但这是我想要做的一个例子:

我有有类别的书.我想说-

Give me all books that were: 
-created_at (added to store) between date1 and date2
-updated_at before date3
-joined with books that exist in shopping carts right now
Run Code Online (Sandbox Code Playgroud)

我还没有编写查询,但我认为rails版本将是这样的:

books_to_consider = Book.find(:all, 
                       :conditions => "created_at <= '#{date2}' AND created_at >= '#{date1}' AND updated_at <= '#{date3}'",
                       :joins => "as b inner join carts as c on c.book_id = b.id")
Run Code Online (Sandbox Code Playgroud)

我并不是说ActiveRecord无法处理这个查询,但是为了便于阅读(或者还有其他我还不知道的限制),是否更容易接受原始SQL?

sql activerecord ruby-on-rails

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

Rails用户:您使用什么异常通知软件?

我见过Ryan Bates谈论exception_logger和异常通知.还有其他好的东西需要考虑吗?你喜欢和不喜欢这些什么?

另外,如果你抓住它们,这些异常通知程序会记录异常吗?

谢谢!

notifications ruby-on-rails exception

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

你能给我一个会话固定攻击的例子吗?

我已阅读有关会话固定的内容,据我了解,它强迫用户使用攻击者的会话.它是否正确?你能告诉我一个如何冒犯用户的例子吗?

security session-fixation

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

具有Mongoid和Rails的字段别名

MongoDB中的常见做法是使用短密钥名称来节省空间.例如,有人可能想使用"fn"而不是"first_name"

但是在你的应用程序中,如果你在整个地方使用"fn",你就会被搞砸了.太难看了.特别是对于Rails,在Mongoid中声明字段时是否有一种简单的方法来指定别名?

另外,有没有人知道任何使用Mongoid的开源示例项目?

谢谢!

ruby-on-rails mongodb mongoid

7
推荐指数
2
解决办法
4600
查看次数

如何使用Ruby Spreadsheet库格式化特定单元格?

格式化列或行似乎没有问题.我在文档中搜索了一堆,进行了一些搜索,并查看了一些电子表格对象上的"方法"结果,我无法弄清楚如何格式化特定的单元格.有没有人这样做过?

电子表格库位于:http : //spreadsheet.rubyforge.org/ http://spreadsheet.rubyforge.org/GUIDE_txt.html

ruby excel spreadsheet

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

如何从lib/tasks中的任务访问rails数据库?

我正在开发一个需要发送短信的应用程序,因此我将运营商信息存储在数据库中.我还需要XML文件中的信息来读取客户端代码.为了实现这一点,我正在编写一个脚本,从DB读取运营商信息并在config目录中创建XML文件.我觉得这个脚本最适合lib/tasks.

我需要从这个脚本访问数据库,但我想使用一些对象来访问它.如果我使用

db = Mysql.new("domain", "username", "password", "database")
Run Code Online (Sandbox Code Playgroud)

我将不得不为不同的环境保留多个版本,因为我不会一直使用MySQL.那将是非常草率的.我相信有办法做到这一点.我试图访问该对象...这是我到目前为止:

RAILS_HOME = File.expand_path(File.join(File.dirname(__FILE__),"../.."))
RAILS_CONFIG = "#{RAILS_HOME}/config"

f = File.new("#{RAILS_CONFIG}/mls_widget_config.xml", "w")
carriers = Carrier.find_all
f.write carriers
f.close
Run Code Online (Sandbox Code Playgroud)

但Carrier没有定义,这是有道理的.如何让这个脚本访问DB中的Carrier对象?

另外作为一方,如果有人知道如何轻松地将我从数据库中读取的内容转换为适当的XML,那将是非常好的.我打算快速写一些自定义的东西.

谢谢!

ruby xml database scripting ruby-on-rails

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

从NSData创建UiImage

下面是我复制的代码(来自这个网站)并且只是稍微修改,因为原始代码无法编译.我想操纵字节数组进行边缘检测并最终简单地改变颜色,但首先我想让基本代码工作.目前,系统编译并运行.它在屏幕上显示一幅画得很厉害的大象.当我触摸图像时,它会消失.单步执行将imageWithData的结果显示为0x0.我用png和bmp尝试了同样的结果

我做错了什么线索?!

ImageViewDrawable定义为:

@interface ImageViewDrawable : UIImageView

// I am using the following code to initialize this ImageView
ImageViewDrawable * uiv = [[ImageViewDrawable alloc] initWithImage:[UIImage imageNamed:@"ele.png"] ];

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // get and work on pixel data
    NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(self.image.CGImage));
    char* bytes =[pixelData bytes];

    // Take away the red pixel, assuming 32-bit RGBA
    for(int i = 0; i < [pixelData length]; i += 4) {
        bytes[i] = bytes[i]; // red
        bytes[i+1] = bytes[i+1]; // green …
Run Code Online (Sandbox Code Playgroud)

iphone byte uiimageview uiimage nsdata

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

使用进程管理器启动延迟作业时丢失PID文件

我正在使用BluePill来管理诸如Rails的延迟作业之类的进程.在BluePill日志中,我收到此消息:

W, [2010-09-27T01:23:20.447053 #19441]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-09-27T01:23:20.447368 #19441]  WARN -- : [fsg_distro:delayed_job] Executing start command: ruby script/delayed_job -e production start
I, [2010-09-27T01:23:20.469165 #19441]  INFO -- : [fsg_distro:delayed_job] Going from down => starting
Run Code Online (Sandbox Code Playgroud)

所以它声称丢失了一个pid文件,但是当BluePill启动延迟作业进程时,不应该创建pid吗?

更新 要更清楚地了解此错误,我可以手动成功运行该命令,但Bluepill无法运行启动命令.当我手动运行它时,它看起来像这样:

rails@george:/srv/fsg_distro/current$ /usr/bin/env RAILS_ENV=production /usr/bin/ruby /srv/fsg_distro/current/script/delayed_job start
delayed_job: process with pid 17564 started. 
Run Code Online (Sandbox Code Playgroud)

当我使用Bluepill运行它时,它看起来像这样:

W, [2010-10-03T21:24:13.943136 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:13.943391 #17326]  WARN …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails delayed-job bluepill

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