【问题标题】:How to display two types of user account pages如何显示两种类型的用户帐户页面
【发布时间】:2011-01-05 11:19:06
【问题描述】:

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

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

我想到的一个选项是使用参数来确定应该在 user/edit 中呈现哪些部分:

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

第一页的 url 如下所示: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 个从用户控制器继承的控制器(姓名和电子邮件)?每个控制器都有各自的视图。

有没有更好的解决方案?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,阿迪亚,你是说这个吗? user_path(@user), :html => { :multipart => true }) 做 |f| %>
    • 是的,使用 user_path(@user,:section => params[:section]), :html => {:multipart => true} ) 做 |f| %>
    • 感谢您回来 Aditya。我认为,我这样做的方式(即通过参数)是一个好方法?
    • 当然,没关系。不要绝对进入多个控制器或将控制器子类化。如果你想让它更干净,请查看多步骤表单上的 railscast。 railscasts.com/episodes/217-multistep-forms
    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多