Rails 3在不同页面上的类似形式

时间:2011-06-03 19:07:52

标签: ruby-on-rails ruby-on-rails-3 forms

我目前在一个表单上有这些字段(:name :email :password :password_confirmation :image :desktopinfo)。我希望在其他网页上也有:image:desktopinfo

第一种形式的当前代码是:

<%= 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。这有什么不同吗?

我该怎么做呢?

谢谢!迪安

更新

Users控制器中的当前代码是:

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'。

2 个答案:

答案 0 :(得分:0)

看起来你有某种身份验证。在您的控制器或ApplicationController中查找它。根据您使用的auth软件包,您可以针对某些操作禁用它。这显然是你想要做的。

答案 1 :(得分: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])

注意验证。