允许用户仅编辑Ruby on Rails上的一些字段

rga*_*o33 5 ruby-on-rails

如何才能实现用户只能编辑记录中的某些字段?

例如:

用户可以在系统上注册并选择并指定用户名,密码等.但是注册用户只能编辑他的姓名,电子邮件和密码,而不能编辑他的用户名.

我有一个部分_form,我用它来创建新的和编辑函数.部分看起来像这样:

    <% form_for @user do |f| %>
    <%= f.error_messages %>
    <p>
            <%= f.label :gruebl_employee_id %><br />
            <%= f.collection_select(:firma_employee_id, FirmaEmployee.find(:all).sort_by{|p| p.lastname.downcase},:id,:full_name, {  :include_blank => "---keine Mitarbeiter---", :prompt => "---Bitte auswählen---"}, { :style => "width: 332px;"}) %>
        </p>
         <%= observe_field(:user_firma_employee_id,
         :frequency => 0.25,
         :url => { :action => :retrieveinfo },
         :with => "'id='+value") %>

        <p>
          <%= f.label :username %><br />
          <%= f.text_field :username %>
        </p>

         <p>
          <%= f.label :admin, "Administrator ?" %><br />
          <%= f.check_box :admin %>
        </p>

        <p>
          <%= f.label :email %><br />
          <%= f.text_field :email %>
        </p>
        <p>
          <%= f.label :password %><br />
          <%= f.password_field :password %>
        </p>
        <p>
          <%= f.label :password_confirmation %><br />
          <%= f.password_field :password_confirmation %>
        </p>
        <p><%= f.submit %></p>
<%end%>
Run Code Online (Sandbox Code Playgroud)

我想要做的是阻止用户更改员工和用户名属性.

提前致谢.

Jam*_*hen 9

在几个地方照顾这个.

首先,在User模型中使用attr_accessible,仅包括您希望用户编辑的那些:

attr_accessible :name, :email, :password, :password_confirmation #...

然后在表单partial中,仅在显示注册表单时显示用户名字段:

<% if @user.new_record? %>
  <%= f.text_field :username %>
<% end %>

最后,在创建操作中,手动设置用户名字段,因为它现在位于attr_accessible列表中,您无法批量分配它:

@user = User.new(params[:user])
@user.username = params[:user][:username]

请记住,如果用户名是能够通过质量分配设置,即使禁用表单的用户名领域,它仍然可以修改(很容易在客户端的形式来改变字段的值).这就是我们必须使用attr_accessible进行预检的原因.

编辑:注意到你的部分,最好将admin字段保护为用户名,否则用户可以通过更改客户端的字段值将自己设置为admin.