2011-02-17 109 views
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%> 

我所試圖做的是阻止改變員工和用戶名屬性的用戶。

在此先感謝。

+0

問題是什麼?你可以發佈你的編輯部分? – JackCA 2011-02-17 14:27:34

+0

<%form_for @user do | f | %> <%= f.error_messages%> – rgalindo33 2011-02-17 14:45:32

+0

對不起..你會在編輯的問題中發現部分內容。謝謝 – rgalindo33 2011-02-17 14:51:13

回答

9

照顧這幾個地方。

首先,在用戶模型使用attr_accessible,只包括那些你希望用戶能夠編輯:

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

然後在表格部分,只顯示用戶名域顯示的註冊表單時:

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

最後,在創建操作,手動設置的用戶名字段,因爲它現在是在attr_accessible列表中,您不能大規模指派方式:

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

請注意,如果用戶名可以通過批量分配進行設置,即使您在表單中禁用了用戶名字段,也仍然可以進行修改(可以方便地更改客戶端表單中的字段值側)。這就是爲什麼我們必須使用attr_accessible進行保護。

編輯:注意到你的偏好,最好是保護管理員字段爲用戶名,否則用戶可以通過更改客戶端的字段值將自己設置爲管理員。

0

正如我所看到的,你有兩種方式來做到這一點。

1 - 使用html支持將文本框設置爲只讀。所以你的情況,USER_NAME文本框會是這樣的

<input type="text" name="user_name" value="<User Name>" readonly="readonly" /> 

2 - 但我更喜歡做的事情,如創建在軌應用助手只讀文本框可以調用它在有需要

時如此的例子是

在我的應用助手

module ApplicationHelper 

    def read_only_text_field(object_name, method, options = {}) 
      text_field(object_name, method, :disabled => true) 
    end 
end 

在我看來,我有

<%= read_only_text_field :user, :user_name %> 

我認爲它更幹/鐵路的方式。

**重要 - 並確保您doent從你的控制器保存等時算只讀值。通過這種方式,即使用戶改變你仍然擺脫困境,這些只讀值:d

希望這有助於

歡呼

sameera

0

訣竅是將「對象」與標籤一起用於任何你不想改變的東西。以下是您應如何爲用戶名編碼:

<%= f.label(:username, f.object.username) %> 
相關問題