Ruby on rails 迈克尔·哈特尔的毁灭方法';s Rails教程第10章
我正在阅读Michael Hartl的Rails教程,现在我已经读到了第10章,我不明白一件事: 删除一个Micropost时,定义的Ruby on rails 迈克尔·哈特尔的毁灭方法';s Rails教程第10章,ruby-on-rails,railstutorial.org,destroy,Ruby On Rails,Railstutorial.org,Destroy,我正在阅读Michael Hartl的Rails教程,现在我已经读到了第10章,我不明白一件事: 删除一个Micropost时,定义的destroy方法中的@Micropost变量在哪里? (我怀疑它可能是通过link\u to方法连接到服务器的,但我不确定这是否合理) 查看: 静态页面控制器: (对于不熟悉本教程的用户,MicroPost的表单和索引位于根页面,由静态页面处理) 如果缺少一些代码,下面是完整的项目: 好的,在做一些练习时,我找到了解决办法。 原来@micropost变量是由在\
destroy
方法中的@Micropost
变量在哪里?(我怀疑它可能是通过
link\u to
方法连接到服务器的,但我不确定这是否合理)
查看:
静态页面控制器:
(对于不熟悉本教程的用户,MicroPost的表单和索引位于根页面
,由静态页面
处理)
如果缺少一些代码,下面是完整的项目:好的,在做一些练习时,我找到了解决办法。 原来
@micropost
变量是由在\u操作之前调用的私有方法赋值的:
Microposts控制器:
但是,这被认为是良好的做法吗 此处引用代码
您可以看到控制器顶部有一条线
操作前:仅更正用户::销毁
这一行告诉rails在调用:destroy
之前调用当前用户
函数
现在,在correct_user
函数中,我们将从params
获取id
,并声明@micropost
变量
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
redirect_to root_url if @micropost.nil?
end
希望这能回答你的问题。您可以从这里了解有关回调的更多信息。这是Rails惯例的一部分。这与在显示、编辑、更新和销毁操作之前使用before_操作查找micropost相同。在本例中,您在调用销毁操作之前调用了正确的用户方法,以确保在尝试销毁之前存在micropost。
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
@micropost.destroy
redirect_to request.referrer || root_url
end
def home
if logged_in?
@micropost = current_user.microposts.build
@feed_items = current_user.feed.paginate(page: params[:page])
end
end
before_action :correct_user, only: :destroy
private
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
redirect_to root_url if @micropost.nil?
end
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
redirect_to root_url if @micropost.nil?
end