我得到了一個模型day
和一個模型task
。 day
有很多tasks
。我爲此使用了一個nested_form。用戶輸入一個time
和兩個變量,計算結果爲index
。第一個任務,最高index
有starttime
=上午8點。
現在我想訂購tasks
index
並將每個任務的time
添加到上一個任務的starttime
。Ruby on Rails createmethod不起作用
我試圖解決這個問題:
def create
@day = current_user.days.build(day_params)
@day.save
@day.tasks.each do |task|
task.index = task.ur**2 + task.imp
end
if current_user.worktype = 1
@tasks = @day.tasks.order(index: :desc)
x = 0
@tasks.each do |task|
if x = 0
task.starttime = Time.new.beginning_of_day + 8*60*60
x = task.id
else
task.starttime = @day.task.find(x).starttime + @day.task.find(x).time*60
x = task.id
end
end
elsif current_user.worktype = 2
...
end
@day.save
respond_to do |format|
if @day.save
format.html { redirect_to @day, notice: 'Day was successfully created.' }
format.json { render :show, status: :created, location: @day }
else
format.html { render :new }
format.json { render json: @day.errors, status: :unprocessable_entity }
end
end
end
但不知何故starttime
仍然爲零,當我要打印出來的view
- @tasks.each do |task|
...
= task.starttime.strftime("%H:%M")
我rails console
檢查這一點。
consolelog爲POST:
Started POST "/days" for ::1 at 2016-08-04 02:19:03 +0200
Processing by DaysController#create as HTML
Parameters: {"utf8"=>"V", "authenticity_token"=>"YaLq2XBUMltzCpZxvKBp5NQGUgiw/Ockto1r0zy/dZHU3HVlp4lpcsH/b3Q9WYas97ENlwRiPzCUdOiBC06GbA==", "day"=>{"tasks_attributes"=>{"1470269934695"=> {"description"=>"1", "ur"=>"1", "imp"=>"1", "time"=>"1"
, "_destroy"=>"false"}, "1470269939280"=>{"description"=>"2", "ur"=>"3", "imp"=>"3", "time"=>"2", "_destroy"=>"false"}}}, "commit"=>"Create Day"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
(0.0ms) begin transaction
SQL (3.5ms) INSERT INTO "days" ("user_id", "created_at", "updated_at") VALUES (?, ?, ?) [["user_id", 1], ["created_at", "2016-08-04 00:19:03.986762"], ["updated_at", "2016-08-04 00:19:03.986762"]]
SQL (0.0ms) INSERT INTO "tasks" ("description", "ur", "imp", "time", "day_id", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["description", "1"], ["ur", 1], ["imp", 1], ["time", 1], ["day_id", 11], ["created_at", "2016-08-04 00:19:03.992775"], ["updated_at", "2016-08-04 00:19:03.992775"]]
SQL (0.0ms) INSERT INTO "tasks" ("description", "ur", "imp", "time", "day_id", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["description", "2"], ["ur", 3], ["imp", 3], ["time", 2], ["day_id", 11], ["created_at", "2016-08-04 00:19:03.994776"], ["updated_at", "2016-08-04 00:19:03.994776"]]
(4.0ms) commit transaction
Task Load (0.5ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."day_id" = ? [["day_id", 11]]
Task Load (0.5ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."day_id" = ? ORDER BY "tasks"."index" DESC [["day_id", 11]]
(0.0ms) begin transaction
SQL (1.0ms) UPDATE "tasks" SET "index" = ?, "updated_at" = ? WHERE "tasks"."id" = ? [["index", 2], ["updated_at", "2016-08-04 00:19:04.006796"], ["id", 24]]
SQL (1.0ms) UPDATE "tasks" SET "index" = ?, "updated_at" = ? WHERE "tasks"."id" = ? [["index", 12], ["updated_at", "2016-08-04 00:19:04.009792"], ["id", 25]]
(3.6ms) commit transaction
(0.0ms) begin transaction
(0.0ms) commit transaction
Redirected to http://localhost:3000/days/11
Completed 302 Found in 39ms (ActiveRecord: 14.6ms)
編輯
大廈@ evanbike的答案我添加了一個task.save
每次starttime
設置。但沒有任何改變,所以我試圖刪除If語句,現在保存starttime
,但每個task
都有相同的時間。
@tasks = @day.tasks.order(index: :desc)
x = 0
@tasks.each do |task|
if x = 0
task.starttime = Time.new.beginning_of_day + 8*60*60
task.save
x = task.id
else
task.starttime = @day.task.find(x).starttime + @day.task.find(x).time*60
task.save
x = task.id
end
end
@day.save
我希望有人能幫我解決這個問題。
在此先感謝。
你如何測試'starttime'來查看它是否爲零? – MarsAtomic
@MarsAtomic更新後可能發佈 – Max
在你的控制檯日誌中,當這個'create'運行時,你能否看到一天對象正在被保存以及嵌套任務?另外,你是否嘗試過使用'save!'來顯式拋出錯誤,以防萬一出現錯誤時保存? – MarsAtomic