我目前在一个表单上有这些字段(: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'。
答案 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])
注意验证。