编辑记录时,不在“通常”的轨道编辑路径上

时间:2014-02-19 21:06:13

标签: ruby-on-rails devise

我有一个可以在通常的rails编辑路径上编辑的用户模型。

但是,我想允许用户模型中的许多字段可以从根目录中编辑。

我已经尝试将以下代码放在索引页面中,除非其中一个字段存在验证错误,否则它会起作用。发生这种情况时,用户将被路由到通常的用户编辑路径。

如果用户从索引页面发送请求(但是保留它以便用户被路由回到编辑路径,如果那是在哪里),我该怎么改变这个以便用户被路由回索引(带有错误消息)他们正在编辑?

另外,感觉就像我正在攻击这个而不是以“最佳实践”方式进行 - 是否有更好的方法。

代码我已从编辑路径复制到索引页面:

<%= simple_form_for(current_user, :url => registration_path(current_user), :html => { :method => :put, :class => 'form-vertical ' }) do |f| %>
    <%= f.error_notification %>
      <%= display_base_errors current_user %>
      <%= f.input :dry_fly, inline_label: 'I use dry flies', as: :boolean, label: false %>
      <%= f.input :wet_fly, inline_label: 'I use wet flies', as: :boolean, label: false %>
      <%= f.input :lure, inline_label: 'I use lures', as: :boolean, label: false %>
      <%= f.input :still_water, inline_label: 'I fish lakes', as: :boolean, label: false %>
      <%= f.input :river, inline_label: 'I fish rivers', as: :boolean, label: false %>
      <%= f.input :current_password, :hint => "we need your current password to confirm your changes", :required => true %>
      <%= f.button :submit, 'Update', :class => 'btn-primary' %>
    <% end %>

RegistrationsController #update:

def update
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
    prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)

    if update_resource(resource, account_update_params)
      yield resource if block_given?
      if is_flashing_format?
        flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
          :update_needs_confirmation : :updated
        set_flash_message :notice, flash_key
      end
      sign_in resource_name, resource, :bypass => true
      respond_with resource, :location => after_update_path_for(resource)
    else
      clean_up_passwords resource
      respond_with resource
    end
  end

看起来Kirti Thorat的回应是正确的方法 - 但我无法从设计控制器那里看到,如果验证失败,它会定义应该使用哪条路线?

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但首先需要检查HTTP Referer,它将为您提供请求的来源,因此您可以在update操作中呈现您的视图。例如:

如果更新失败,您可以通过检查引用来呈现相应的编辑用户路径 如下图所示

if URI(request.referer).path == edit_user_path 
  render :edit              ### Specify appropriate action
else
  render :index            ### Specify appropriate action
end