Rails - 如何将控制器中的自定义方法更改为常规方法?
Rails - How do I change my custom methods in a controller to conventional methods?
我有一个 Subscribers Controller
,带有自定义方法,例如 add_subscribers
、add_subscriber
和 remove_subscriber
。
如何将这些方法更改为使用常规 create
和 destroy
方法来执行在我的自定义方法中完成的相同操作?
app/controllers/subscribers_controller.rb
def add_subscribers
@group = Group.find(params[:id])
authorize @group, :create?
@course = @group.course
@student_subscribers = @course.subscribers
.where("group_id !=? or group_id is null", @group.id)
end
def add_subscriber
group = Group.find(params[:id])
authorize group, :create?
subscriber = Subscriber.find(params[:subscriber_id])
subscriber.group = group
if subscriber.save
flash[:alert] = "Successfully added!"
redirect_to add_subscribers_group_path(group)
else
flash[:error] = "Failed to add user!"
redirect_to add_subscribers_group_path(group)
end
end
def remove_subscriber
group = Group.find(params[:id])
authorize group, :create?
subscriber = Subscriber.find(params[:subscriber_id])
subscriber.group = nil
if subscriber.save
flash[:alert] = "Successfully removed!"
redirect_to group
else
flash[:error] = "Failed to remove from group!"
redirect_to group
end
end
end```
I want to use the conventional methods to perform these operations instead of the custom methods. How can I do that?
在您的 config/routes 文件中:
resources :subscribers
这将为该资源创建标准路由,并通过订阅者控制器路由它们。您现在需要在控制器中将方法重命名为 create
、update
等。
最后,如果您通过表单到达这些终点,则需要对其进行编辑,使其指向正确的路线。
将上述行添加到 routes.rb 后,运行 rake routes
从终端获取所有路线的完整列表
从您的代码可以推断出订阅者是组下的嵌套资源:
resources :groups do
resources :subscribers
end
这将产生类似 /groups/:group_id/subscribers/:id
的路线
remove_subscriber
完全映射到 destroy
操作(delete
http 动词),但您必须更改 id 参数 - 会有 params[:group_id]
和 params[:id]
是订阅者
add_subscribers
可能会呈现表单,所以它是 new
操作
add_subscriber
是 create
我有一个 Subscribers Controller
,带有自定义方法,例如 add_subscribers
、add_subscriber
和 remove_subscriber
。
如何将这些方法更改为使用常规 create
和 destroy
方法来执行在我的自定义方法中完成的相同操作?
app/controllers/subscribers_controller.rb
def add_subscribers
@group = Group.find(params[:id])
authorize @group, :create?
@course = @group.course
@student_subscribers = @course.subscribers
.where("group_id !=? or group_id is null", @group.id)
end
def add_subscriber
group = Group.find(params[:id])
authorize group, :create?
subscriber = Subscriber.find(params[:subscriber_id])
subscriber.group = group
if subscriber.save
flash[:alert] = "Successfully added!"
redirect_to add_subscribers_group_path(group)
else
flash[:error] = "Failed to add user!"
redirect_to add_subscribers_group_path(group)
end
end
def remove_subscriber
group = Group.find(params[:id])
authorize group, :create?
subscriber = Subscriber.find(params[:subscriber_id])
subscriber.group = nil
if subscriber.save
flash[:alert] = "Successfully removed!"
redirect_to group
else
flash[:error] = "Failed to remove from group!"
redirect_to group
end
end
end```
I want to use the conventional methods to perform these operations instead of the custom methods. How can I do that?
在您的 config/routes 文件中:
resources :subscribers
这将为该资源创建标准路由,并通过订阅者控制器路由它们。您现在需要在控制器中将方法重命名为 create
、update
等。
最后,如果您通过表单到达这些终点,则需要对其进行编辑,使其指向正确的路线。
将上述行添加到 routes.rb 后,运行 rake routes
从终端获取所有路线的完整列表
从您的代码可以推断出订阅者是组下的嵌套资源:
resources :groups do
resources :subscribers
end
这将产生类似 /groups/:group_id/subscribers/:id
remove_subscriber
完全映射到 destroy
操作(delete
http 动词),但您必须更改 id 参数 - 会有 params[:group_id]
和 params[:id]
是订阅者
add_subscribers
可能会呈现表单,所以它是 new
操作
add_subscriber
是 create