【问题标题】:Rails 3 similar form on different pageRails 3在不同页面上的类似表格
【发布时间】:2011-06-03 19:07:51
【问题描述】:

我目前在一个表单上拥有这些字段 (: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 =&gt; params[:image], :desktopinfo =&gt; params[:desktopinfo])放在哪里

另外,我收到了undefined local variable or methodupdate_user_path'`。

【问题讨论】:

  • 不,我正在使用 RailsTutorial.org 中使用的身份验证,因为这是我在制作应用程序时学到的。

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


【解决方案1】:

您似乎有某种身份验证。在您的控制器或 ApplicationController 中查找它。根据您使用的身份验证包,您可以为某些操作禁用它。这显然是你想要做的。

【讨论】:

    【解决方案2】:

    这里的问题是因为您将表单实例与您的模型相关联,并且当您不提供密码时模型验证失败。

    在此处查看 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 =&gt; params[:image], :desktopinfo =&gt; params[:desktopinfo])

    注意验证。

    【讨论】:

    • 我认为您应该花一些时间尝试了解您在做什么,而不是仅仅让这个工作。花点时间了解 Rails:guides.rubyonrails.org
    • 'update_user_path' 是操作的名称,请相应地更改它。您可能希望添加一个单独的操作来仅编辑 2 个字段,而不是使用正常的更新方法(假设您还需要在某处编辑所有字段)。在新方法中,将 update_attributes 替换为我添加的语句。去掉感叹号!如果你的写法和你展示的一样。
    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2015-09-25
    • 2018-06-09
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多