Rails 3 похожая форма на другой странице - PullRequest
0 голосов
/ 03 июня 2011

У меня в настоящее время есть эти поля (: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 во второй форме. Имеет ли это какое-то значение?

Как бы я поступил так?

Спасибо! Декан

UPDATE

Текущий код в контроллере 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 голосов
/ 04 июня 2011

Проблема здесь в том, что вы связываете экземпляр формы с вашей моделью, и проверки модели не выполняются, если вы не указали пароль.

Посмотрите документацию 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 голосов
/ 04 июня 2011

Казалось бы, у вас есть какая-то аутентификация на месте. Ищите это в вашем контроллере или ApplicationController. В зависимости от того, какой пакет аутентификации вы используете, вы можете отключить его для определенных действий. Это, очевидно, то, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...