小编And*_*rew的帖子

Rails:使用params重定向

传递一些参数和重定向的最佳方法是什么?

我看到的例子说,如果你只是将它们添加到你的重定向哈希中,它们会传递请求,但这似乎在Rails 3中不再起作用了.

在我的示例中,我有一个"编辑多个"页面,允许用户一次更改多个项目的类别.因为他们正在浏览这么多项目,所以这个表格是分页的.

如果用户打开items page 3,进行一些更改并按下sumbit,则控制器操作会收到一条帖子请求,其中包含已更改的记录的ID,进行更改并重定向到edit_many_items_path.

所以,重定向看起来像这样:

redirect_to edit_multiple_items_path, :notice => 'items updated'
Run Code Online (Sandbox Code Playgroud)

...但我想要它做的是:

redirect_to edit_multiple_items_path, :notice => 'items updated', :page => ##
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,那么有没有人会有什么样的例子呢?

redirect routing ruby-on-rails params ruby-on-rails-3

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

Ruby:条件矩阵?多个条件的情况?

在红宝石中,我想知道是否有办法做到以下几点:

我基本上有一个包含四种可能结果的矩阵:

A is True, B is True
A is True, B is False
A is False, B is True
A is False, B is False
Run Code Online (Sandbox Code Playgroud)

我想以最干净的"红宝石方式"为此写一个测试.

我希望做类似的事情

case[A,B]
  when A && B then ...
  when A && !B then ...
  when !A && B then ...
  when !A && !B then ...
end
Run Code Online (Sandbox Code Playgroud)

......但这不起作用.那么,处理这种情况的最佳方法是什么?

ruby conditional matrix switch-statement

23
推荐指数
3
解决办法
2万
查看次数

无法在Rails 3中跳过验证?

我正在研究Rails 3中的一个项目,我需要创建一个空记录,将其保存到数据库而不进行验证(因为它是空的),然后允许用户编辑此记录以完成它,并从中进行验证然后出去.

现在我遇到了一个非常基本的问题:在任何情况下我都无法保存模型而不进行验证.

我在控制台中尝试了以下内容:

model = Model.new
model.save(false) # Returns RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
model.save( :validate => false ) # Returns same error as above

model = Model.create
model.save(false) # Same runtime error
model.save( :validate => false ) # Same runtime error
Run Code Online (Sandbox Code Playgroud)

然后我尝试将模型中的所有验证更改为:on => :update.任何保存尝试都会出现相同的错误消息.

那我在这里错过了什么?如何创建空记录,然后在用户编辑时进行验证?

谢谢!

validation model runtime-error ruby-on-rails ruby-on-rails-3

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

Ruby(Rails)将属性委托给另一个模型的方法?

-编辑-

在从第一个答案中读到Delegate方法之后,我的问题是,是否可以将两种不同的方法委托给另一种方法.

IE:我目前有:@ photo.attachment.file.url和@ photo.attachment.height,以及@ photo.attachment.width

我希望能够通过@ photo.file.url,@ photo.file.height,@ photo.file.width访问所有这些内容.

语法的原因是Attachment是一个使用Paperclip管理文件的模型,Paperclip正在生成.file方法(该模型称为Attachment,模型使用Paperclip has_attached_file :file).

-ORIGINAL问题 -

我想知道Ruby中的别名方法和属性(我认为这是一个常见的ruby问题,尽管我的应用程序在Rails 3中):

我有两个模特:照片has_one附件.

附件具有"高度"和"宽度"属性,以及"文件"方法(来自Paperclip).

所以默认情况下,我可以访问Attachment模型的位,如下所示:

photo.attachment.width # returns width in px
photo.attachment.height # returns height in px
photo.attachment.file # returns file path
photo.attachment.file.url #returns url for the default style variant of the image
photo.attachment.file.url(:style) #returns the url for a given style variant of the image
Run Code Online (Sandbox Code Playgroud)

现在,在我的照片类中,我创建了这个方法:

def file(*args)
    attachment.file(*args)
end
Run Code Online (Sandbox Code Playgroud)

那么,现在我可以简单地使用:

photo.file # returns file path
photo.file.url # returns file url (or variant url …
Run Code Online (Sandbox Code Playgroud)

alias ruby-on-rails shortcut ruby-on-rails-3

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

Rails:通过表单创建新记录时验证失败后的URL

让我们说我正在使用一个表单和一个标准的Rails restful控制器创建一个新的Foo,它看起来像这样:

class FoosController < ApplicationController
  ...
  def index
    @foos = Foo.all
  end

  def new
    @foo = Foo.new
  end

  def create
    @foo = Foo.create(params[:foo])
    if @foo.save
      redirect_to foos_path, :notice => 'Created a foo.'
    else
      render 'new'
    end
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)

所以,如果我使用标准的REST风格的控制器(如上),然后当我创建我的富example.com/foos/new,如果我提交表单,它可以正确保存我在example.com/foos显示索引操作.但是,如果未正确填充表单,则会再次呈现表单并显示错误消息.这一切都是普通的香草.

但是,如果显示错误,将呈现表单页面,但URL将是example.com/foos,因为CREATE操作会发布到该URL.但是,人们期望找到Foos #index at example.com/foos,而不是他们刚刚提交的表单,并添加了错误消息.

这似乎是Rails的标准行为,但它对我来说并没有多大意义.显然我可以重定向回new而不是从create动作渲染new,但问题是错误消息等会随着内存中部分完整的Foos而丢失.

有没有一个干净的解决方案来解决这个问题,example.com/foos/new当他们提交的新Foo表单中存在错误时,可以将人们发送回去吗?

谢谢!

url controller ruby-on-rails view ruby-on-rails-3

19
推荐指数
2
解决办法
3590
查看次数

Ruby方式:按零划分

我有以下方法来计算平均值:

def compute_average(a,b,c,d,e)
  total = [a,b,c,d,e].sum.to_f
  average = [a, 2*b, 3*c, 4*d, 5*e].sum / total
  average.round(2)
end
Run Code Online (Sandbox Code Playgroud)

这没什么特别的,但它有一个问题,我期望所有平均方程都有:如果输入全为零,它可能除以零.

所以,我想到这样做:

def compute_average(a,b,c,d,e)
  total = [a,b,c,d,e].sum.to_f
  if total==0
    average = 0.00
  else
    average = [a, 2*b, 3*c, 4*d, 5*e].sum / total
    average.round(2)
  end
end
Run Code Online (Sandbox Code Playgroud)

......这样可行,但对我来说感觉很糟糕.有没有更优雅的"Ruby Way"来避免这种划分为零的问题?

我希望我拥有的是"除非那么"的操作员,比如......

average = numerator / denominator unless denominator == 0 then 0
Run Code Online (Sandbox Code Playgroud)

有什么建议?

ruby refactoring divide-by-zero

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

ActiveRecord查找全部不按ID排序?

我在Heroku部署上遇到了一个奇怪的问题,我似乎无法在本地复制.基本上当我在特定模型上找到所有内容而不是按ID排序时,它似乎根本无法返回它们.

通常记录如下:

>> Model.all

=> [<model id: 2>,<model id: 1>,<model id: 3>,<model id: 4>,<model id: 5>]
Run Code Online (Sandbox Code Playgroud)

... 等等.

如果我明确地调用Model.order("id ASC")它,则按预期返回模型.

是什么赋予了?为什么会发现所有不按降序ID顺序返回对象?

activerecord sql-order-by ruby-on-rails-3

18
推荐指数
2
解决办法
8165
查看次数

自动将徽章放在图像角上

我有一个布局,图像在某个区域内"浮动".布局如下所示:

布局示例

像这样的来源:

<div class="free_tile">
  <a class="img_container canonical" href="/photos/10">
    <img class="canonical" src="http://s3.amazonaws.com/t4e-development/photos/1/10/andrew_burleson_10_tile.jpg?1303238025" alt="Andrew_burleson_10_tile">
    <!-- EDIT: I am aware that I can put the badge here. See the edit notes and image below. -->
  </a>
  <div class="location">Houston</div>
  <div class="taxonomy"> T6 | Conduit | Infrastructure </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS看起来像这样(在SCSS中):

div.free_tile { width: 176px; height: 206px; float: left; margin: 0 20px 20px 0; position: relative;
  &.last { margin: 0 0 20px 0; }
  a.img_container { display: block; width: 176px; height: 158px; text-align: center; line-height: 156px; …
Run Code Online (Sandbox Code Playgroud)

html javascript css jquery position

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

pytest只运行更改的文件?

我是Python的新手,试图学习工具集.

我已经弄清楚如何在py.test -f编码时观察我的测试.我无法弄清楚的一件事是,是否有办法做一个更聪明的观察者,就像Ruby的Guard库一样.

用后卫+ MINITEST我得到的行为是,如果我像保存一个文件my_class.rb,然后my_class_test.rb执行,如果我打enter在CLI中运行所有测试.

到目前为止,使用pytest我还没有找到一种方法来只运行与上次触摸的文件相对应的测试文件,从而避免等待整个测试套件运行,直到我获得当前文件为止.

你会怎么做pythonistas呢?

谢谢!

python pytest

17
推荐指数
5
解决办法
3506
查看次数

Rails:让这个rake任务知道它在测试环境中

我在我的lib/tasks文件夹中定义了以下rake任务:

namespace :db do
  namespace :test do
    task :prepare => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,它的作用是在我运行时为测试数据库播种rake db:test:prepare.我这样做是因为我有一些必须存在的基本记录才能使应用程序正常运行,所以它们不是可选的,也不能真正被嘲笑.

另外,我有一个在开发和生产中使用S3进行资产存储的模型,但我不希望它使用S3进行测试.我在模型中设置了一个方法,用于将存储路径从S3更改为本地ifRails.env.test?

但是,这不起作用.我想知道rake任务是否知道它被调用的环境,事实证明它不是.我把它放在我的seeds.rb文件的顶部:

puts "Environment Check: Rails Environment = #{Rails.env}"
Run Code Online (Sandbox Code Playgroud)

果然,当任务运行时,这打印: Environment Check: Rails Environment = development

那么,我怎样才能重做这个rake任务,以便当它播种测试数据库时它知道它正在为测试数据库播种?

environment rake ruby-on-rails seed ruby-on-rails-3

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