ruby while 循环语法错误
syntax error on while loop with ruby
我的 API 有一个语法错误,我不明白。
在我的 rooms_controller 中,我有一个 multiple_create 方法负责创建多个房间:
def multiple_create
i = 0
while i < params[:room_number]
Room.create!(room_params)
i++
end
if i == params[:room_number]
render json: {message: "All rooms where successfully created"}
else
render json: {message: "There was a problem during room creation. Some rooms might not have been created"}
end
end
我正在使用 curl 请求测试此方法:
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-User-Email: leon_kuhlman@zulauf.net' \
-H 'X-User-Token: 7B5RGzsosxekH-5p2tt5' \
-d '{ "room_number": 10, "room": {"content": "plein sud"} }' \
http://localhost:3000/api/v1/hotels/1/rooms/multiple_create
但我收到语法错误:
> syntax error, unexpected keyword_end
/Users/davidgeismar/code/davidgeismar/quick_bed_api/app/controllers/api/v1/rooms_controller.rb:68: syntax error, unexpected end-of-input, expecting keyword_end
app/controllers/api/v1/rooms_controller.rb, line 34
---------------------------------------------------
``` ruby
29 i = 0
30 num = 5
31 while i < num
32 Room.create!(room_params)
33 i++
> 34 end
35 if i == params[:room_number]
36 render json: {message: "All rooms where successfully created"}
37 else
38 render json: {message: "There was a problem during room creation. Some rooms might not have been created"}
39 end
``
我不明白为什么我会在这里收到错误消息。如果你能找到的话,这是我的所有控制器!
class Api::V1::RoomsController < Api::V1::BaseController
before_action :set_room, only: [ :show, :update]
def index
if params[:search].blank?
@rooms = policy_scope(Room)
else
@slots = policy_scope(Room)
.where('name ILIKE ?', "%#{params[:search]}%")
end
end
def show
end
def update
if @room.update(room_params)
render :show
else
render_error
end
end
## input hotel + number of rooms
def multiple_create
i = 0
num = 5
while i < params[:room_number]
Room.create!(room_params)
i++
end
if i == params[:room_number]
render json: {message: "All rooms where successfully created"}
else
render json: {message: "There was a problem during room creation. Some rooms might not have been created"}
end
end
def create
#ATTENTION LA LIGNE CI-DESSOUS DOIT ETRE CORRIGÉ POUR LIER ACCOUNT ET ROOM
@room = current_user.rooms.build(room_params)
authorize @room
if @room.save
render :show
else
render_error
end
end
private
def set_room
@room = Room.find(params[:id])
authorize @room
end
def room_params
params.require(:room).permit(:hotel_id, :content)
end
def render_error
render json: { errors: @room.errors.full_messages }, status: :unprocessable_entity
end
end
我认为您的错误是由于您使用了无效的 ruby 语法 i++
引起的。尝试将其替换为 i += 1
问题是i++
。将其替换为 i += 1
或 i = i + 1
。 Ruby 不支持 ++
运算符。
我的 API 有一个语法错误,我不明白。 在我的 rooms_controller 中,我有一个 multiple_create 方法负责创建多个房间:
def multiple_create
i = 0
while i < params[:room_number]
Room.create!(room_params)
i++
end
if i == params[:room_number]
render json: {message: "All rooms where successfully created"}
else
render json: {message: "There was a problem during room creation. Some rooms might not have been created"}
end
end
我正在使用 curl 请求测试此方法:
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-User-Email: leon_kuhlman@zulauf.net' \
-H 'X-User-Token: 7B5RGzsosxekH-5p2tt5' \
-d '{ "room_number": 10, "room": {"content": "plein sud"} }' \
http://localhost:3000/api/v1/hotels/1/rooms/multiple_create
但我收到语法错误:
> syntax error, unexpected keyword_end
/Users/davidgeismar/code/davidgeismar/quick_bed_api/app/controllers/api/v1/rooms_controller.rb:68: syntax error, unexpected end-of-input, expecting keyword_end
app/controllers/api/v1/rooms_controller.rb, line 34
---------------------------------------------------
``` ruby
29 i = 0
30 num = 5
31 while i < num
32 Room.create!(room_params)
33 i++
> 34 end
35 if i == params[:room_number]
36 render json: {message: "All rooms where successfully created"}
37 else
38 render json: {message: "There was a problem during room creation. Some rooms might not have been created"}
39 end
``
我不明白为什么我会在这里收到错误消息。如果你能找到的话,这是我的所有控制器!
class Api::V1::RoomsController < Api::V1::BaseController
before_action :set_room, only: [ :show, :update]
def index
if params[:search].blank?
@rooms = policy_scope(Room)
else
@slots = policy_scope(Room)
.where('name ILIKE ?', "%#{params[:search]}%")
end
end
def show
end
def update
if @room.update(room_params)
render :show
else
render_error
end
end
## input hotel + number of rooms
def multiple_create
i = 0
num = 5
while i < params[:room_number]
Room.create!(room_params)
i++
end
if i == params[:room_number]
render json: {message: "All rooms where successfully created"}
else
render json: {message: "There was a problem during room creation. Some rooms might not have been created"}
end
end
def create
#ATTENTION LA LIGNE CI-DESSOUS DOIT ETRE CORRIGÉ POUR LIER ACCOUNT ET ROOM
@room = current_user.rooms.build(room_params)
authorize @room
if @room.save
render :show
else
render_error
end
end
private
def set_room
@room = Room.find(params[:id])
authorize @room
end
def room_params
params.require(:room).permit(:hotel_id, :content)
end
def render_error
render json: { errors: @room.errors.full_messages }, status: :unprocessable_entity
end
end
我认为您的错误是由于您使用了无效的 ruby 语法 i++
引起的。尝试将其替换为 i += 1
问题是i++
。将其替换为 i += 1
或 i = i + 1
。 Ruby 不支持 ++
运算符。