【问题标题】:how to modify the js for the :delete action in rails如何为rails中的:delete操作修改js
【发布时间】:2012-10-03 20:47:58
【问题描述】:

我有一个包含标题、正文和作者的帖子模型。我想启用一个功能,每当用户尝试删除帖子时,它应该询问帖子的作者姓名,如果指定的作者姓名与post.author 相同,那么他/她可以删除帖子,否则它不应该。

请指导我完成我需要遵循的步骤。我试图创建一个 author_destroy 操作,但它失败了,因为它无法在 Post 索引中找到该操作。

注意:我使用author 字段作为User 模型的替代品。

【问题讨论】:

  • 你是如何定义你的路线的?你只使用resources :posts吗?
  • resources :posts do resources :comments end
  • 简单地使用resources 设置路由不会使该操作可用。阅读更多关于routes & resources here

标签: javascript ruby-on-rails-3 custom-controls


【解决方案1】:

首先,我建议只向帖子作者显示删除功能,并为所有其他用户隐藏它,在 erb 中类似:

<% if @user == post.author %>
<%= link_to "delete", post, :method => :delete, :confirm => "You sure?",
                            :title => "Delete #{post.title}" %>
<% endif %>

然后是 Posts 控制器中的销毁操作:

def destroy
  Post.find(params[:id]).destroy if @user == post.author
  redirect_to posts_path
end

【讨论】:

  • 我仍然会检查(通过授权)当前用户是否被允许调用服务器上的 destroy 操作,因为如果您知道路由和帖子编号
  • 做了一个简单的验证示例,您可以按照 MWJ 的建议进行验证
  • 如果我添加这个东西,我会在索引中收到错误syntax error, unexpected keyword_ensure, expecting keyword_end。这里有没有end
  • 你不应该错过一个,但你可以将第二行的 if 语句更改为更传统的语句,看看是否是问题所在,if @user == post.author 在一行,然后Post.find(params[:id]).destroy接下来是end,但这不应该是问题...
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 2015-11-02
  • 2014-03-09
  • 1970-01-01
相关资源
最近更新 更多