首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby on rails不允许将变量‘instance_variable_set’用作实例变量名

问ruby on rails不允许将变量‘instance_variable_set’用作实例变量名
EN

Stack Overflow用户
提问于 2015-04-14 23:00:29
回答 2查看 2.2K关注 0票数 0

我已经关注这个问题有一段时间了,但一直没有运气。

我正在使用Ruby on Rails。我尝试使用.each遍历一个数组,并使用每个元素设置一个变量名。具体地说,该变量将控制表单上的复选框是否显示为选中状态。

我一直收到这样的错误:不允许将` @ PG-13_check‘作为实例变量名。以前的问题似乎都是由于没有用@声明实例变量而引起的。但我已经把它包括进来了。

型号:

代码语言:javascript
复制
class Movie < ActiveRecord::Base 
  attr_accessible, :title, :rating, :description, :release_date 
  def self.ratings 
    ratings = [G, PG, PG-13, R] 
  end
 end

控制器代码:

代码语言:javascript
复制
@movies = Movie.all
@all_ratings = Movie.ratings
@all_ratings.each do |x| 
  instance_variable_set("@#{x}_check", "true")
end

反过来,视图显示为:

代码语言:javascript
复制
= check_box_tag "ratings[#{rating}]", 1, checked = @#{rating}_check, :id => "ratings_#{rating}"  
EN

回答 2

Stack Overflow用户

发布于 2015-04-14 23:07:41

只要仔细检查,Ruby变量中不允许有连字符。只有数字、字母和下划线是--也就是说,如果它与/[a-zA-Z_][a-zA-Z0-9_]*/不匹配,它就不是允许的变量名。这意味着您不能声明名为PG-13_check的变量。但是,您可以声明一个名为PG13_check的函数,这(IMO)足够清楚。您可以通过一个非常简单的String#gsub应用程序实现这一点

代码语言:javascript
复制
x.gsub('-', '')

因此,在您的代码中,这将如下所示:

代码语言:javascript
复制
@all_ratings.each do |x| 
  instance_variable_set("@#{x.gsub('-', '')}_check", "true")
end

如果你想把它转换回原来的形式,你可以使用下面这样的代码:

代码语言:javascript
复制
@all_ratings.each do |x| 
  instance_variable_set("@#{x.gsub('-', '_')}_check", "true")
end

然后,要获取x,您可以获取字符串格式并使用:

代码语言:javascript
复制
variable_name.split('_')[1..-2].join('_').gsub '_', '-'

这可能不是最有效的方法,但这是我首先想到的。它所做的是去掉末尾的_check (.split('_')[1..-2].join('_')),然后用-替换所有的_。

票数 0
EN

Stack Overflow用户

发布于 2015-04-15 03:51:00

我是一个初学者,所以我希望我不会因为错过了一些太明显的东西而看起来不好,从而浪费了大家的时间。但最终我只是在check_box标记中添加了一个条件语句,这就完成了我的任务。这是针对edx类的,所以我不会给出实际的答案。它的效果是:

代码语言:javascript
复制
= check_box_tag "ratings[#{rating}]", 1, checked = does the params hash includes the rating that was checked true ? false, :id => "ratings_#{rating}"

感谢所有的回复,我学到了很多!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29630760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档