Этот код предназначен для списка пользователей (пользователь может создать список дел пользователя). Этот конкретный ресурс содержит не элементы списка, а только заголовок списка и тип списка.
class Api::V1::UserListsController < ApplicationController
respond_to :json
skip_before_filter :verify_authenticity_token
def index
if authenticate_user
user_lists = @current_user.user_lists
if user_lists
respond_with user_lists, each_serializer: Api::V1::UserListSerializer
else
render json: { error: "Could not find user's lists."}, status: :not_found
end
else
render json: { error: "User is not signed in." }, status: :unauthorized
end
end
def show
if authenticate_user
user_lists = @current_user.user_lists
user_list = user_lists.find_by_id(params[:id])
if user_list
respond_with user_list, serializer: Api::V1::UserListSerializer
else
render json: { error: "Could not find user's list."}, status: :not_found
end
else
render json: { error: "User is not signed in." }, status: :unauthorized
end
end
def create
if authenticate_user
user_list = @current_user.user_lists.new(user_list_params)
if (user_list.save!)
respond_with :api, :v1, @current_user, user_list, serializer: Api::V1::UserListSerializer
else
render json: { error: "Could not create new User List."}, status: :unprocessable_entity
end
else
render json: { error: "User is not signed in." }, status: :unauthorized
end
end
def update
if authenticate_user
user_list = @current_user.user_lists.find_by_id(params[:id])
if (user_list.update_attributes(user_list_update_params))
respond_with :api, :v1, @current_user, user_list, serializer: Api::V1::UserListSerializer
#respond_with user_list, serializer: Api::V1::UserListSerializer
else
render json: { error: "Could not update User List." }, status: :unprocessable_entity
end
end
end
private
def user_list_params
params.require(:user_list).permit(:user_id, :type_id, :title)
end
def user_list_update_params
params.require(:user_list).permit(:type_id, :title)
end
end
Теперь обновление работает, когда я PUT/PATCH... но я получаю
Completed 204 No Content in 24ms (ActiveRecord: 4.3ms)
Прошло около 4+ месяцев с тех пор, как я делал какие-либо рельсы, и тогда я только начинал их изучать.
1) Кто-нибудь знает, почему мне ничего не возвращают? Я знаю, что это как-то связано с моей строкой кода response_with в обновлении, но я не уверен, что именно.
2) Может ли кто-нибудь объяснить мне разницу между SHOW response_with и CREATE response_with. Я помню, что у меня была проблема с пониманием этого тогда и, очевидно, сейчас.
ПОКАЗЫВАТЬ
respond_with user_list, serializer: Api::V1::UserListSerializer
СОЗДАЙТЕ
respond_with :api, :v1, @current_user, user_list, serializer: Api::V1::UserListSerializer
a) Почему сначала для создания требуется :api и :v1, а для показа — нет?
b) Почему для create требуется @current_user, а для show нет?
Приложение: вот мой сериализатор для справки
class Api::V1::UserListSerializer < ActiveModel::Serializer
attributes :id, :user_id, :type_id, :title
has_many :items, embed: :ids
end