我有一个包含以下字段的用户模型: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个从用户控制器继承的控制器(名称和电子邮件)?每个控制器都有各自的视图。
有更好的解决方案吗?
答案 0 :(得分:0)
为什么不将“section”参数发送给更新调用呢?这样当出现错误并进入编辑页面时,section参数将可用,并且将呈现正确的表单。
在更新期间发送“部分”的方式也应该非常简单。发布您拥有表单的位,我将向您展示如何将当前“部分”传递给更新操作。基本上你只是在表单动作中拼出路径“user_path(@ user,:section =&gt; params [:section])”。