标签: ruby-on-rails-2

如何更新after_save中的属性而不会导致rails 2.3中的递归?

我有一个模型,附有Paperclip的视频.保存后,我使用保存的视频生成缩略图.我需要在每次保存后执行此操作,即使尚未上传新视频,因为用户可以更改捕获缩略图的时间.

我目前正在使用after_post_process来执行此操作,但它只会在上传文件时生成缩略图(这是回调,它是Paperclip的一部分).

理想情况下我会使用这样的after_save回调:

after_save :save_thumbnail
def save_thumbnail
  #generate thumbnail...
  self.update_attributes(
    :thumbnail_file_name => File.basename(thumb), 
    :thumbnail_content_type => 'image/jpeg'
  )
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,update_attributes调用save,然后调用before_save回调导致无限循环.是否有一种简单的方法来规避这种行为?

ruby-on-rails callback save ruby-on-rails-2

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

应用范围的全局变量

Rails中,我应该在哪里定义可以被Rails堆栈的每一层识别的变量.

例如,我想有一个CUSTOMER_NAME='John'可以在helper,rake任务,控制器模型中访问的变量.我应该在Rails应用程序中的哪个位置定义此变量?

我正在使用Rails v2.3.2

ruby-on-rails ruby-on-rails-2

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

如何在Mac OSX上安装PCRE开发标题

我刚刚将我的MacBook Pro升级为Mavericks并且我的本地Ruby on Rails开发环境没有直接运行,当我访问时localhost我看到It works!并记得我需要启动Phusion Passenger,所以当我运行passenger start它时检查所有先决条件并失败当它到达PCRE开发标题时:

 * Checking for PCRE development headers...
    Found: no
Run Code Online (Sandbox Code Playgroud)

它告诉我去http://www.pcre.org/下载它们所以我从这里下载了8.33 到我的Downloads文件夹,所以我解压缩它,cd'd到文件夹然后运行:

./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

然后cd'回到我桌面上的rails应用程序目录并重新运行passenger start但它仍然是相同的.尝试了一个新的终端窗口,但没有任何区别.

我之前必须这样做才能让我的开发环境工作,但这次似乎无法解决它.

我也尝试了,brew install pcre但它说Warning: pcre-8.33 already installed.

macos pcre ruby-on-rails passenger ruby-on-rails-2

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

"SystemTimer"的未定义方法"name":String

我在使用旧的Ruby on Rails 2应用程序时遇到问题,该应用程序在一年内没有工作.

我正试图rake test:functionals在我的项目目录的根目录中运行,但是我得到了undefined method 'name' for "SystemTimer":String.

我已经粘贴了我认为与此问题相关的所有内容:http: //pastebin.com/NgBvystZ

此外,当我自己运行rake时,我 Errors running test:units! 不知道如何调试它.

我复制并粘贴了一些我认为对理解这个问题有用的东西.非常感谢您的时间.谢谢.

ruby ruby-on-rails ruby-on-rails-2

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

显示复选框列表而不是多个选择

我有一个MyModel带有序列化属性的模型a,描述了一个符号数组.

此代码有效:

<% form_for @my_model do |f| %>
  <%= f.select :a, MyModel::AS, :multiple => true) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

参数是正确的:

{ :my_model => { :a => [:a_value1, :a_value2] } }
Run Code Online (Sandbox Code Playgroud)

我想将这个多选项转换为一组复选框,如下所示:

<% form_for @my_model do |f| %>
  <% MyModel::AS.each do |a_value|
    <%= f.check_box(:a_value) %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

它也有效,但参数完全不同:

{ :my_model => { :a_value1 => 1, :a_value2 => 1 } }
Run Code Online (Sandbox Code Playgroud)

我想到2个解决方案可以回归到第一个解决方案......

  • 将我check_box转换为check_box_tag,替换多个选择,并在check_box_tags上的用户clic时添加一些javascript以"检查"选择值.然后,参数将直接在控制器中相同.
  • 在控制器中添加一个小代码,以"适应"我的参数.

什么解决方案不那么难看?或者还有其他的吗?

ruby-on-rails ruby-on-rails-2

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

使用整数ID类型字段的多态关联

我有一个表Foo有一个多态的belongs_to关联调用bar.该foos表具有标准bar_id列.但是,bar_type我有一个整数bar_type_id列,而不是基于字符串的列.此列引用id表中的列bar_types.bar_types.name保存表示特定bar实例的类的类的名称.

Rails(理想情况下> = 2.3.10)是否允许这种类型的多态关联?

ruby-on-rails polymorphic-associations ruby-on-rails-2

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

如何使用form_for设置操作?

我在现有控制器上创建了一个新页面.

我在控制器上添加了2个操作方法:prompt_user和process_feedback.

所以我通过这个页面进入

redirect_to :controller => :users, :action => :prompt_user
Run Code Online (Sandbox Code Playgroud)

form_for代码看起来像

<% form_for :user, @user do |f| %>
Run Code Online (Sandbox Code Playgroud)

其中生成以下html

<form action="users/prompt_user" method="post">
Run Code Online (Sandbox Code Playgroud)

请注意,操作是prompt_user,我想将其设置为process_feedback.我以为我可以用按钮改变动作

<%= submit_tag "Process feedback" %>
Run Code Online (Sandbox Code Playgroud)

但那没用.

所以我的问题是如何将操作更改为process_feedback?

另外,正如你可能会说的那样,我对rails非常陌生,所以如果我做的事特别迟钝,我很想知道它是什么.

ruby-on-rails ruby-on-rails-2

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

如何调试Rails I18N查找?

在Rails文档中,I18N字符串似乎有不同的默认位置,这取决于I18N查找是从视图,模型/验证,控制器,帮助器......,如果它是标签等启动的...

我怎么能看到Rails默认情况下试图查找的东西,例如当我只使用t('.something')时?

ruby-on-rails internationalization ruby-on-rails-3 ruby-on-rails-2 ruby-on-rails-3.1

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

param'samples'的预期Hash(得到数组)

我一直在关注嵌套表单和复杂表单的Railscasts剧集.在单个表单中创建多个模型的过程中,我能够编辑,更新,删除和创建嵌套在Batch模型中的样本模型的记录.

我很长时间以来一直在试图解决这个问题但是无法找到合适的解决方案.

我的开发日志文件给我以下错误.

错误信息:

Status: 500 Internal Server Error
  expected Hash (got Array) for param `samples'
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有这样的更新动作

def update
     @batch = Batch.find(params[:id])

     respond_to do |format|
       if @batch.update_attributes(params[:batch])
         flash[:notice] = 'Successfully updated Batch.'
         format.html { redirect_to(@batch) }
         format.xml  { head :ok }
       else
         format.html { render :action => "edit" }
         format.xml  { render :xml => @batch.errors, :status => :unprocessable_entity }
       end
     end
   end
Run Code Online (Sandbox Code Playgroud)

我的观点是这样的:

<%= form_for @batch do |f| %>
......
<%= f.fields_for :samples do |s_form| %>
.... s_form things
<% …
Run Code Online (Sandbox Code Playgroud)

edit nested-forms multiple-models ruby-on-rails-2

9
推荐指数
2
解决办法
8040
查看次数

每当有人尝试批量分配受保护的属性时,抛出异常

我正在修复客户端应用程序中的一些批量分配漏洞,我想确保Rails不会默默地丢弃大规模分配受保护属性的尝试.相反,我想抛出一个异常,所以我可以调查.

即,每当这通常出现在日志中时:

WARNING: Can't mass-assign these protected attributes: ...
Run Code Online (Sandbox Code Playgroud)

我想抛出异常(或者另外)

编辑:我正在使用Rails 2.3.4

activerecord attributes ruby-on-rails ruby-on-rails-2

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