使用Draper装饰器的未定义方法link_to_edit

亚历克斯·尼科拉耶夫94

我有一个User和Post模型,它们以经典方式彼此关联-User has_many :postsPost belongs_to :user在我的users#show,我其中显示用户的个人资料,还列出了他所做的所有帖子。另外,我想提供一些链接来分别编辑和删除每个帖子。因此,我弥补了这一点:

<% @user.posts.each do |post| %>
  <h1><%= link_to post.title, post_path(post) %></h1>
  <% if @user == current_user %>
      <%= link_to 'Edit', edit_post_path(post) %>
      <%= link_to 'Delete', post_path(post), method: :delete %>
  <% end %>
<% end %>

但是肯定将这种逻辑放在视图中会导致混乱,因此我决定使用Draper并为此编写装饰器。当我们要检查权限posts#editposts#delete方法时,我想出了Post模型的装饰器,并尝试在中使用它PostsController它去了:

class PostDecorator << Draper::Decorator
  delegate_all

  def link_to_edit
    if object.user == current_user
      h.link_to 'Edit', h.edit_post_path(object)
    end
  end

  def link_to_delete
    if object.user == current.user
      h.link_to 'Delete', h.post_path(object), method: :delete
    end
  end   
end

然后,在我的PostsController

# ... class definition
before_action :set_post, only: [:show, :edit, :update, :destroy]

# ... other controller methods
def edit; end

def update
  if @post.update(post_params)
    @post.save
    redirect_to post_path(@post)
  else
    render 'edit'
  end
end

def destroy
  @post.destroy
  redirect_to feed_path
end

private

# Using FriendlyId gem to have neat slugs
def set_post
  @post = Post.friendly.find(params[:id]).decorate
end

但是每次我尝试使用他的帖子列表,使用新助手<%= post.link_to_delete %>以及<%= post.link_to_edit %>不带条件的混乱来呈现用户个人资料时,它只会向我返回以下错误:

错误

我究竟做错了什么?

塞巴斯蒂安·伊奥尔加(Sebastian Iorga)

您可能同时想出了这一点,但对于其他人来说,这是一个答案:您正在调用@post = ....decorate控制器,但正在@user.posts.each { |post| ... }视图中使用馈送到该块的对象未装饰。只有@post

在您看来,您应该做类似的事情@user.posts.each { |raw_post| post = raw_post.decorate }显然,具有ERB语法。@user.decorated_posts.each ...在哪里

class User < ActiveRecord::Base
  ...
  def decorated_posts
    # this will load every post associated with the user.
    # if there are a lot of them you might want to only load a limited scope of them
    posts.map(&:decorate)
  end
  ...
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打字稿方法装饰器:这是未定义的

来自分类Dev

装饰实例上的未定义方法

来自分类Dev

装饰实例上的未定义方法

来自分类Dev

rails link_to控制器方法未定义

来自分类Dev

未定义的方法“ has_selector?” 用于rspec装饰器

来自分类Dev

带引导分页的Draper-未定义的方法“ total_pages”

来自分类Dev

使用承诺或回调时装饰器函数返回未定义

来自分类Dev

未定义的方法'edit _..._ path'

来自分类Dev

未定义Angular2装饰器

来自分类Dev

link_to =>未定义的方法路径

来自分类Dev

如何使用Draper用模块化装饰器装饰STI模型?

来自分类Dev

enablePlugins方法使用的未定义变量?

来自分类Dev

未使用的未定义方法

来自分类Dev

无法调用未定义的方法“使用”

来自分类Dev

enablePlugins方法使用的未定义变量?

来自分类Dev

使用$ this时调用未定义的方法

来自分类Dev

NoMethodError未定义方法`link_to_function'

来自分类Dev

水豚:[]:Array的未定义方法“ link”

来自分类Dev

NoMethodError未定义方法`link_to_function'

来自分类Dev

未定义的方法“ + @”

来自分类Dev

使用Draper装饰的public_activity宝石

来自分类Dev

使用CK编辑器上传图像为nil:NilClass提供了未定义的方法'size'

来自分类Dev

NameError:名称“ edit”未定义

来自分类Dev

控制器规格的未定义方法“包含”

来自分类Dev

导轨4的控制器的未定义方法'raw'

来自分类Dev

方法未定义-编译器如何错过它?

来自分类Dev

控制器操作中的未定义方法new

来自分类Dev

累加器在使`reduce`方法中返回未定义

来自分类Dev

调用未定义的方法ActiveRecord \ Config :: initialise()编写器

Related 相关文章

热门标签

归档