Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 迈克尔·哈特尔的毁灭方法';s Rails教程第10章_Ruby On Rails_Railstutorial.org_Destroy - Fatal编程技术网

Ruby on rails 迈克尔·哈特尔的毁灭方法';s Rails教程第10章

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变量是由在\

我正在阅读Michael Hartl的Rails教程,现在我已经读到了第10章,我不明白一件事:

删除一个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