我有一个类方法,我想访问属性的值
class Run
attr_accessor :line
def self.output(options={})
station_no = options[:station]
title = options[:title]
line = self.line
station = line.stations[station_no-1]
end
end
Run Code Online (Sandbox Code Playgroud)
在这个类方法中我想访问line属性的值,在类方法中我无法访问属性的值self.line.所以请建议我如何访问.
这是我的表格:
= simple_form_for [@post, @comment] do |f|
= f.input :text, :label => false
= f.button :submit
Run Code Online (Sandbox Code Playgroud)
注释嵌套在帖子资源中.评论验证:validates :text, :length => { :minimum => 5 }
评论控制器:
def create
@post = Post.find params[:game_id]
comment = @post.comments.build :user_id => current_user, :text => params[:comment][:text]
comment.save
redirect_to @post
end
Run Code Online (Sandbox Code Playgroud)
表单本身工作正常.如果我输入超过5个字符,则会创建注释.但如果它更少,我只是被重定向到posts#show并且表单中没有验证错误(我已经检查了源代码).
我也尝试填写设计注册表,如果失败,我可以看到错误.
我猜问题是由重定向引起的.但无论如何,我不知道如何解决它.
出于某种原因,我还没有完全了解Rails如何与Ruby交互/想出Ruby本身.
我会明白这一点.例如,在Ruby on Rails项目中,您可能会遇到以下情况:
class Product < ActiveRecord::Base
default_scope :order => 'title'
end
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑.我假设我们正在调用default_scope方法,该方法继承自ActiveRecord基类......所以我们可以设置一些选项.我们传递符号:order =>'title'.是:在default_scope函数中只是一个哈希值,它将该哈希值设置为'title'?我能正确地做到这一点.
另外,例如,当您开始抛出基本验证时,您会得到类似的结果
validates :price, :numericalcity => {:greater_than_or_equal_to => 0.01 }
Run Code Online (Sandbox Code Playgroud)
我知道这是做什么的,但它的语法让我大吃一惊.首先,它看起来像符号用于静态重用的字符串值,但在这里我们发送一个动态符号...在哪里去?然后我们是符号中的符号吗?这基本上是哈希中的哈希还是它到底在做什么?我只是试图在我的大脑中追踪它,以真正了解正在发生的事情.
现在,如果我有像@user这样的用户对象.
我可以做@ user.to_json
我想要做的是为json对象rails创建添加值.我试过这个:
@user.attributes.merge{ :catalyst_show => true }
Run Code Online (Sandbox Code Playgroud)
但是语法错误的错误,意外的tASSOC,期待'}'
关于如何向json对象添加属性的任何想法?
谢谢
我一直在使用rails大约一个月,主要是爱它,有时真气(我还没有通过魔法调试特别有效).
我有一个画廊页面,从一个简单的页面扩展.每个图库页面都有许多图库图像.
class Gallery < Page
belongs_to :page, :dependent => :destroy
has_many :gallery_images, :dependent => :destroy
accepts_nested_attributes_for :gallery_images
end
class GalleryImage < ActiveRecord::Base
has_attached_file :image, :styles => { :medium => "600x600>", :thumb => "100x100>" }
belongs_to :gallery
end
Run Code Online (Sandbox Code Playgroud)
我试图通过页面控制器编辑图库.
def edit
@page = Gallery.find(params[:id])
@house = @page.house
end
Run Code Online (Sandbox Code Playgroud)
通过页面/ edit.html.erb我将库形式部分渲染
<%= form_for @page do |f| %>
<p><b>Images</b></p>
<% for image in @page.gallery_images %>
<%= image.image.url(:thumb) %>
<% end %>
<%= f.fields_for :gallery_images do |builder| %>
<% render :partial => "galleries/gallery_image_fields", …Run Code Online (Sandbox Code Playgroud) 我正在使用Ruby on Rails 3.0.9,我正在尝试设置delay_job gem.如果在重新启动Apache2服务器后,我在Terminal\Console中运行以下命令,则一切正常:
RAILS_ENV=development script/delayed_job stop
RAILS_ENV=development script/delayed_job -n 2 start
Run Code Online (Sandbox Code Playgroud)
但是,由于我总是希望在应用程序启动时启动worker,在我config/initializers/delayed_job.rb添加以下代码(处理开发和生产模式):
if Rails.env.development?
system 'RAILS_ENV=development script/delayed_job stop'
system 'RAILS_ENV=development script/delayed_job -n 2 start'
elsif Rails.env.production?
system 'RAILS_ENV=production script/delayed_job stop'
system 'RAILS_ENV=production script/delayed_job -n 2 start'
end
Run Code Online (Sandbox Code Playgroud)
但是,通过使用上面的代码并在重新启动Apache2服务器之后,DJ gem不再按预期工作.也就是说,当我在Terminal\Console中运行上述命令行时,它不处理作业.
如何让DJ正常工作?问题是什么?
PS:我想这样做是为了使流程自动化.
它接收config/initializers/delayed_job.rb文件中的上述代码不会"创建"与RAILS_ROOT/tmp/pids目录中的DJ相关的"pids"文件.这些只能通过手动运行上述命令行来创建.为什么会这样?
UPDATE的@Devin中号
我的config/initializers/delayed_job.rb包含:
# Options
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 2
Delayed::Worker.max_attempts = 5
Delayed::Worker.max_run_time = 1.hour
Delayed::Worker.delay_jobs = !Rails.env.test?
if Rails.env.development?
system "RAILS_ENV=development #{Rails.root.join('script','delayed_job')} stop" …Run Code Online (Sandbox Code Playgroud) ruby initialization ruby-on-rails delayed-job ruby-on-rails-3
用户可以拥有多条消息:
class User < ActiveRecord::Base
has_many :messages, :foreign_key => "publisher_id"
end
Run Code Online (Sandbox Code Playgroud)
为了获得最新的消息时间,我做了:
class User < ActiveRecord::Base
def last_message_time
last_message = messages.max{ |m1, m2| m1.created_at <=> m2.created_at }
last_message ? last_message.created_at : nil
end
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我确信有更好的方法来做到这一点.
你会怎么做?
我是一个铁杆新手试图遵循如何执行一些Ajax调用(切换到jQuery后),但我遇到了一个问题.
每当我触发ajax代码(new Ajax.Request())时,我都会在firebug中得到"Ajax is not defined".有比我更多技能的人都知道这里有什么?
更新:
对于其他任何有此问题的人来说,生成上述代码的代码是对它的调用 remote_function()
我做了什么来设置:
我的public/javascripts /文件夹因此具有以下文件:
我的HTML中包含的脚本如下所示:
<script src="/javascripts/jquery.js?1312911234" type="text/javascript"></script>
<script src="/javascripts/jquery-ui.js?1312911234" type="text/javascript"></script>
<script src="/javascripts/jquery_ujs.js?1312911234" type="text/javascript"></script>
<script src="/javascripts/application.js?1312911234" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud) 我的上一篇文章是关于在LEFT OUTER JOIN上编写带有条件的SQL查询的最佳方法:
LEFT OUTER JOIN条件(where,order by)?
现在,我需要将这个优秀的SQL转换为甜蜜的Active Record Query(Rails 3).;-)
我有2个型号:
训练 has_many:training_histories
TrainingHistory belongs_to:training
如何编写范围以获取下面的SQL检索结果?
SELECT tc.id, tc.name, tc.order,
th.id as history_id, th.finished_at, th.score
FROM trainings tc
LEFT OUTER JOIN training_histories th ON th.training_id = tc.id
and th.id =
(SELECT th1.id from training_histories th1 where th1.training_id = tc.id
and th1.finished_at is not null
order by th1.finished_at desc limit 1)
WHERE tc.id > 4
AND tc.id < 8
GROUP BY tc.id
ORDER BY tc.order_by ASC, tc.id ASC
Run Code Online (Sandbox Code Playgroud)
我想检索TRAININGS的所有记录,并添加TRAINING_HISTORIES的最后一个有效(又名完成)相关记录.
有什么建议 …
我需要max-width动态更改CSS属性,具体取决于与给定模型关联的图像数量.
我怎么能在Rails 3.1中做到这一点?
(Javascript&SASS/SCSS也可供我们使用)
ruby-on-rails-3 ×10
ruby ×3
css ×1
css3 ×1
delayed-job ×1
javascript ×1
json ×1
mysql ×1
postgresql ×1
rubygems ×1
scope ×1
simple-form ×1
sql ×1
symbols ×1