Rails101二刷 8.3的edit部分

有一个疑问, 难到要def show后才能进行edit以及update的定义, 最后才能work咩? 带着疑问尝试吧.


在posts的controller里面写edit定义, 是参照def create的内容写成

def edit

    @group = Group.find(params[:group_id])

    @post = Post.new(post_params)

  end

这样就开始报错


改成如下

def edit

    @group = Group.find(params[:group_id])

    @post = Post.new

  end

也就是说, 我去掉了post_params的部分:

这样写, 就消除了之前的报错!

同样在views/posts下面生成edit的页面


成功显示了edit页面! 也就是说没有def show也是能直接写edit的啊啊啊!

注意, views的内容要指定到[@group, @post]这样才能显示! 之前尝试的时候, 只用到@post就不显示~



执行就报错


能正常显示咧~~


新的发现

发现一个问题, 这样edit执行后直接用了new的功能, 即, 之前写的旧内容不会显示, edit的页面里全是空的文章内容, 毕竟是new格式


所以应该不能用 @post = Post.new 

尝试了一下, 真的不会把之前的内容"修改"而是真的执行new, 笑死了, 还跟new似的自动跳到group显示页面. "所谓的edit"执行后,生成了新的文章, 旧文章内容还保留. 真是要命哈哈哈哈

是不是定义了update后,就用上@post = Post.update即可显示旧内容了~期待一下


居然不是!!!


把@post = Post.new 改成 @post = Post.find(params[:group_id])就定位成功了! 


报错汇总

在写了update的def后, 我还尝试过的 

@post = Post.edit 

@post = Post.update 

@post = Post.edit(post_params)

@post = Post.find(post_params)

都被报错了!



新发现


改成这样, 也是同样能通过edit之前的报错. 这个估计好些? 感觉找的是post的ID?

推测这个params的写法习惯应该是直接写"[:id]"的话, 就是前面大写的词语的id, 比如, 

Post.find(params[:id]) 这里直接的" :id " 就是前面首字母大写的"Post"的id的意思. 

你可能感兴趣的:(Rails101二刷 8.3的edit部分)