如何显示两种类型的用户帐户页面

时间:2011-01-05 11:19:06

标签: ruby-on-rails

我有一个包含以下字段的用户模型:first_name,last_name,email。

客户想要两页。编辑名字和姓氏的第一页和编辑电子邮件地址的第二页。

我想到的一个选项是使用参数来确定应该在用户/编辑中呈现的部分内容:

  <% if !params[:section] %>
    <%= render :partial => 'form_for_name' %>
  <% elsif params[:section] == 'email' %>
    <%= render :partial => 'form_for_email' %>
  <% end %>

第一页的网址如下:http://localhost:3000/users/1/edit

和第二页:http://localhost:3000/users/1/edit?section=email

有一点需要注意。用户模型在 def update 中包含以下代码:

    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end

这意味着,在电子邮件页面上,如果用户发送了无效的电子邮件,则会在第一页而不是电子邮件页面上显示错误。

我希望了解实施此方案的最佳方法是什么。或者我应该有2个从用户控制器继承的控制器(名称和电子邮件)?每个控制器都有各自的视图。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

为什么不将“section”参数发送给更新调用呢?这样当出现错误并进入编辑页面时,section参数将可用,并且将呈现正确的表单。

在更新期间发送“部分”的方式也应该非常简单。发布您拥有表单的位,我将向您展示如何将当前“部分”传递给更新操作。基本上你只是在表单动作中拼出路径“user_path(@ user,:section =&gt; params [:section])”。