【问题标题】:how to link to edit_post_path from index page for a simple Rails blog?如何从一个简单的 Rails 博客的索引页面链接到 edit_post_path?
【发布时间】:2016-09-12 22:23:39
【问题描述】:

编辑:我发现了一个类似的线程,我很抱歉没能早点找到它。将遵循此线程的建议:

How to route from a nested resource in rails? Getting 'ActiveRecord::RecordNotFound in UsersController#show'

EDIT2:啊,我在一个类似的帖子中找到了这个:

这是因为在布局模板中调用了 。这是放错地方了。如果您正在查看 /games,则无法编辑,因为不存在 :id。

明白了。我需要创建一个 find_id 方法,不是吗?将保持此答案更新


我正在关注博客的基本 Rails 教程

我已经在 posts_controller 中定义了编辑和更新功能:

定义编辑
@post = Post.find(params[:id])
结束

定义更新
@post = Post.find(params[:id])

  if @post.update(params[:post].permit(:title, :body))  
      redirect_to @post
  else  
      render 'edit'  
  end  

结束

并链接到显示页面中的 edit_path (localhost:3000/posts/1) 工作正常(它转到 http://localhost:3000/posts/1/edit):

但是当我在每个帖子下方的索引页面中放置相同的代码时,它尝试重定向到的 url 是

http://localhost:3000/posts/%23%3CPost::ActiveRecord_Relation:0xd0a2518%3E/edit

很明显,它获取正确的 ID 存在问题。而不是 %23%3CPost::ActiveRecord_Relation:0xd0a2518%3E,它应该只获取要编辑的帖子的 ID。

这可能是一个非常容易解决的问题,但正如您所知,我还很新。提前致谢。哦,有人还可以解释“参数”的来源吗?为什么我不必定义这个?我在posts_controller 的私有部分定义了post_params,但是什么是params?也许我会用谷歌搜索。困惑什么:

如果@post.update(params[:post].permit(:title, :body))

其实就是。我知道它是否更新是一个布尔值,但不确定更新的参数是什么。提前致谢!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    如果您从数据库中提取了之前的游戏,则可以在显示操作中编辑游戏。

    当您展示游戏时,您会渲染每个游戏

    def index
     @game = Game.all
    end
    

    这会循环播放您的所有游戏,并使用游戏模板或部分渲染它们。 (view/games/_game.erb)

    每个游戏都知道自己的 ID。所以你所要做的就是在那个局部调用edit_path

    edit_game_path(@game)
    

    它会带你到特定游戏的编辑页面。

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 2013-09-22
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多