我试图在" me"下命名几条路线。 / me部分在此命名空间下拥有所有基于用户配置文件/帐户的内容,以实现更清晰的路由。
最好的方法是什么?我发现重写默认的REST路由(profiles / 1 / edit)会产生一些问题,比如表单没有更新。
路线
get "/me/profile" => "profiles#show", :as => :my_profile
get "/me/profile/:what" => "profiles#edit", :as => :my_profile_edit
post "/me/profile/:what" => "profiles#edit"
ProfilesController
def edit
@profile = current_user.profile
if ["basics", "location", "details", "photos"].member?(params[:what])
render :action => "edit/edit_#{params[:what]}"
else
render :action => "edit/edit_basics"
end
end
def update
@profile = current_user.profile
@profile.form = params[:form]
respond_to do |format|
if @profile.update_attributes!(params[:profile])
format.html { redirect_to :back, :notice => t('notice.saved') }
else
format.html { render action => "/me/profile/" + @profile.form }
end
end
end
如果上面的感觉对REST原则非常糟糕。我怎样才能以更好的方式实现想要的结果?
答案 0 :(得分:1)
好吧,如果你真的想坚持REST那么多,我建议将:what
移到GET参数哈希中。然后你可以像这样重写你的路线
scope "/me" do
resource :profile, :only => [:show, :edit, :update]
所以你要将编辑页面作为profile_edit_path(:what => "details")
更多关于代码的事情。
update_attributes
更改为update
render action =>
更改为render :template =>
params[:profile]
。您需要指定表格允许的参数。这样做是为了防止大规模分配。认为你应该看看CodeSchool tutorial on Rails 4。