mdi*_*147 2 ruby object ruby-on-rails-4
我的问题一开始似乎很简单,但我还无法解决它,所以我从数据库中获取一些记录,然后我需要为每个检索到的记录添加一个属性。我尝试按照我的模型
class Lesson < ActiveRecord::Base
attr_reader :palindrome #getter
attr_writer :palindrome #setter
attr_accessor :palindrome #both
belongs_to :schedule
belongs_to :user
has_one :schedule
end
Run Code Online (Sandbox Code Playgroud)
在我的控制器中我这样做是为了添加它
def index
@lessons = Lesson.select(:id,:start_date,:users_allowed,:name,:users_enrolled).where(start_date: (Time.now.beginning_of_week.beginning_of_day)..Time.now.end_of_week.end_of_day).order(start_date: :desc)
@schedules = Array(Schedule.where(user_id: 50).pluck(:lesson_id))
day_id = params[:id].to_i
@day_1 = []
@day_2 = []
@day_3 = []
@day_4 = []
@day_5 = []
@day_6 = []
if day_id.present?
@lessons.each do |lesson|
lesson.palindrome = 'TEST'
case lesson.start_date.wday
when 1
@day_1 << lesson
when 2
@day_2 << lesson
when 3
@day_3 << lesson
when 4
@day_4 << lesson
when 5
@day_5 << lesson
when 6
@day_6 << lesson
end
end
case day_id
when 1
@lessons = @day_1
when 2
@lessons = @day_2
when 3
@lessons = @day_3
when 4
@lessons = @day_4
when 5
@lessons = @day_5
when 6
@lessons = @day_6
end
render json: @lessons
end
end
Run Code Online (Sandbox Code Playgroud)
但我得到了这个回应
[
{
"id": 7019,
"start_date": "2016-10-24T20:30:00.000Z",
"users_allowed": 4,
"name": "Power - Funcional",
"users_enrolled": 2
},
{
"id": 7018,
"start_date": "2016-10-24T20:00:00.000Z",
"users_allowed": 4,
"name": "Power - Funcional",
"users_enrolled": 0
}]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,没有返回我分配的新属性,但是我尝试通过调用
render json: @lessons[0].palindrome
Run Code Online (Sandbox Code Playgroud)
它确实返回了属性的值,我的问题是,当我渲染整个对象时,它返回新的 attr 值,我该怎么做?非常感谢
您传递的是 ActiveRecord 对象数组,而不是哈希值。json 转换器将解析模型的属性,而不是分配给这些对象的自定义变量。尝试将模型转换为哈希:
lesson = lesson.attributes
lesson['palindrome'] = 'TEST'
Run Code Online (Sandbox Code Playgroud)
还要考虑重构你的代码,我认为你不需要那些 case 语句,也不需要那些@dayx难以理解的变量。