2011-06-03 42 views
0

我當前有這些字段(:name :email :password :password_confirmation :image :desktopinfo)在一個窗體上。我想在另一頁上有:image:desktopinfoRails 3類似的窗體在不同的頁面上

第一種形式目前的代碼是這樣的:

<%= form_for(@user, :html => { :multipart => true }) do |f| %> 
    <%= render 'shared/error_messages', :object => f.object %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :email %> 
    <%= f.text_field :email %> 

    <%= f.label :password %> 
    <%= f.password_field :password %> 

    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation %> 

    <%= f.label :image %> 
    <%= f.file_field :image %> 

    <%= f.label :desktopinfo, "Desktop Info" %> 
    <%= f.text_area :desktopinfo %> 
    <%= f.submit "Update" %> 
<% end %> 

當添加如下代碼到單獨的頁面,它進入編輯頁面(與上面的代碼)和錯誤說密碼需要被輸入。

<%= form_for(@user, :html => { :multipart => true }) do |u| %> 
    <%= render 'shared/error_messages', :object => u.object %> 
    <%= u.label :image %> 
    <%= u.file_field :image %> 

    <%= u.label :desktopinfo, "Desktop Info" %> 
    <%= u.text_area :desktopinfo %> 
    <%= u.submit "Update" %> 
<% end %> 

這是一種痛苦,因爲我想要的信息(:image:desktopinfo)來改變,而不需要密碼才能進入。正如你所看到的,我在第二種形式上將f.label更改爲u.label。這有什麼區別嗎?

我該怎麼做呢?

謝謝!院長

UPDATE

在用戶控制當前的代碼是:

def update 
    if @user.update_attributes(params[:user]) 
     redirect_to @user, :flash => { :success => "Profile updated." } 
    else 
     @title = "Edit user" 
     render 'edit' 
    end 
end 

我會在哪裏把@user.update_attributes!(:image => params[:image], :desktopinfo => params[:desktopinfo])

而且,我得到undefined local variable or method update_user_path'`。

+0

你在使用Devise嗎? – David 2011-06-03 21:17:40

+0

不,我正在使用RailsTutorial.org中使用的身份驗證,因爲這是我在製作應用程序時學到的。 – 2011-06-04 16:52:57

回答

0

這似乎你有某種形式的身份驗證。在您的控制器或ApplicationController中查找它。根據您使用的auth軟件包,您可以爲某些操作禁用它。這顯然是你想要做的。

0

這裏的問題是因爲您將表單實例與您的模型相關聯,並且當您不提供密碼時模型驗證失敗。

看看這裏的form_for文檔:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

你可以在這裏使用的form_tag。一個例子如下所示:

<% form_tag(update_user_path, :method=>'post') do %> 
<p> 
    Desktop Info: 
    <%= text_field_tag "desktopinfo" %> 
</p> 
<p> 
    Image: 
    <%= file_field_tag "image" %> 
</p> 
<p> 
    <%= submit_tag 'Submit' %> 
</p> 
<% end %> 

而在控制器更新動作,形式的數據將在params散列可用。現在,除了保存之外,您必須爲要更改的字段調用update_attributes: @user.update_attributes!(:image => params[:image], :desktopinfo => params[:desktopinfo])

負責驗證。

+0

用另一個更新了這個問題:) – 2011-06-04 17:01:22

+0

我想你應該花一些時間試着理解你在做什麼,而不是僅僅讓它工作。花一些時間去理解rails:http://guides.rubyonrails.org/ – 2011-06-04 17:16:06

+0

'update_user_path'是action的名字,相應地改變它。您可能希望添加單獨的操作來僅編輯2個字段,而不是使用正常的更新方法(假設您還需要在某處編輯所有字段)。在新方法中,用我添加的語句替換update_attributes。刪除感嘆號!如果你寫的方式和你說的一樣。 – 2011-06-04 17:22:26

相關問題