我有几个控制器(假设一个是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分配消息?
答案 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 & Internet</dd>
<dd class="type">ISBN: 9780684833484</dd>
<dd>List $15.00 - Qty: 9</dd>
</dl>
</div>
个东西。它没有伤害,真的,你会克服它。
其次,其他错误,if @post.save
无论在哪里都必须工作。你的抽象更有可能引入一些错误。使用调试器来查明发生了什么。