2011-04-03 73 views
0

嘿家伙, 我一般都没有使用过脚手架,虽然我一直在搞Rails很长一段时间。我大部分时间都是手动做事。这种脚手架有什么不对?

现在,我试图创建一个像表单实现宁静。我有一个的form_for,如:

的路线是:现在

scope :path => '/alliances', :controller => :alliances do 
    get 'show/(:id)' => :show, :as => 'alliance' 
    get 'new' => :new, :as => 'new_alliance' 
    post 'create' => :create, :as => 'create_alliance' 
    end 

,由新的动作产生这种形式:

def new 
    @alliance = Alliance.new 
end 

而提交的是这样的:

def create 
    @alliance = Alliance.new(params[:alliance]) 

    if @alliance.save 
     flash[:error] = I18n.translate 'error.alliance_created' 
     redirect_to alliance_path and return 
    else 
     redirect_to new_alliance_path and return 
    end 
end 

现在,如果有错误,当重定向到new_alliance_path时,我不会收回它。初看起来,这看起来很正常,因为new重新创建了@alliance实例变量。但是,在一些脚手架代码中,它似乎是以类似的方式完成的。

你能看到我做错了吗?

回答

1

你创建行动应该看起来更像是这样的:

def create 
    @alliance = Alliance.new(params[:alliance]) 

    if @alliance.save 
     flash[:error] = I18n.translate 'error.alliance_created' 
     redirect_to alliance_path 
    else 
     render :action => :new 
    end 
end 

致电时重定向再次启动完整的请求生命周期。相反,您只需要使用当前的@alliance对象重新呈现新视图。

我也注意到你正在使用4个空格来缩进。红宝石标准是2.

+0

伟大的修复它thanx!顺便说一句,我实际上使用两个空格,这是粘贴在这里,使它看起来像4在一些代码(不知道为什么:/) – Spyros 2011-04-03 19:34:20

+0

很高兴它帮助。我希望这只是一个堆栈溢出缩进问题。 – 2011-04-03 19:39:24