可以在继承的方法中分配flash散列吗?

时间:2017-01-26 00:43:16

标签: ruby-on-rails

我有几个控制器(假设一个是PostsController),它们全部都来自AuthenticatedController。每个子控制器中的许多方法执行类似的CRUD操作并重定向回请求引用程序,

我想干掉我的控制器,所以我重构了这些代码并将其全部放在AuthenticatedController do_action中的一个方法中,该方法将接受对象,动作和flash消息。

class AuthenticatedController < ApplicationController

    private

    def do_action(action, obj, message, anchor='')
        if obj.try(:action)
            flash[:notice] = message
        else
            flash[:error] = 'Error Occurred'
        end
        redirect_to request.referer + anchor
    end 

end

class PostController < AuthenticatedController 

    def create
        @post = Post.new
        do_action(:save, @post, 'Created Successfully', "#post-#{@post.id}")
    end

end

它很好用,除了flash信息不再出现在我的视图中。

如果我将do_action移回PostsController,则Flash消息会按预期显示:

class PostController < AuthenticatedController 

    def create
        @post = Post.new
        do_action(:save, @post, 'Created Successfully', "#post-#{@post.id}")
    end

    private

    def do_action(action, obj, message, anchor='')
        if obj.try(:action)
            flash[:notice] = message
        else
            flash[:error] = 'Error Occurred'
        end
        redirect_to request.referer + anchor
    end

end

根据我在阅读this SO question后的理解,flash是委派给请求对象的方法。我能AuthenticatedController访问request.referer中的请求对象,我认为AuthenticatedController

为什么我无法通过sylvainkalache@holbertonschool$ cat text.txt name1 name2 name3 name4 sylvainkalache@holbertonschool$ while read name > do > echo "$name" > done < /tmp/file name1 name2 name3 name4 sylvainkalache@holbertonschool$ 中的方法为Flash分配消息?

1 个答案:

答案 0 :(得分:1)

首先,我不认为DRY是去这里的方式。你应该这样做&#34;轨道方式&#34;。这有点重复,并且在所有动作中都有<div class="product-image"> <a class="thumb" href="/Store/Details/life-on-the-screen/_/R-9780684833484B"><img src="http://images.bookdepot.com/covers/large/isbn978068/9780684833484-l.jpg" alt="" class="cover" /> <div class="price "><span>$</span>2.25 </div> </a> </div> <div class="product-details"> <dl> <dt><div class="nowrap"><span><a href="/Store/Details/life-on-the-screen/_/R-9780684833484B" title="Life On The Screen">Life On The Screen</a></span></div></dt> <dd class="type"><div class="nowrap"><span><a href="/Store/Browse/turkle-sherry/_/N-4294697489/Ne-4">Turkle, Sherry</a></span></div></dd> <dd class="type"><div class="nowrap"><a href="/Store/Browse/simon-and-schuster/_/N-4294151338/Ne-5">Simon and Schuster</a></div></dd> <dd class="type">(Paperback)</dd> <dd class="type">Computers &amp; Internet</dd> <dd class="type">ISBN: 9780684833484</dd> <dd>List $15.00 - Qty: 9</dd> </dl> </div> 个东西。它没有伤害,真的,你会克服它。

其次,其他错误,if @post.save无论在哪里都必须工作。你的抽象更有可能引入一些错误。使用调试器来查明发生了什么。