2014-09-11 5 views
0

Я создаю приложение на рынке (рельсы 4), где продавцы могут перечислить предметы для продажи. У меня есть профиль профиля продавца, где пользователи вводят некоторые сведения об их бренде.Rails 4 - Обновление спецификаций в модели

Я не могу получить запись для обновления с помощью пользовательских входов. Форма отправляется без какой-либо ошибки, но модель не обновляется.

Код ниже. Демонстрация на http://mktdemo.herokuapp.com/seller/18 (логин: [email protected]/PWD: test1234)

маршрут:

match "/seller/:id", to: "users#sellerprofile", via: [:get, :put], as: :sellerprofile 

моя форма:

<%= form_for(@user, url: sellerprofile_path(id: current_user.id), method: :put, html: { :class => 'edit_profile', :multipart => true }) do |f| %> 

    <div class="form-group"> 
    <%= f.label :your_story %><i> (required)</i> 
    <%= f.text_area :profilestory, class:"form-control" %> 
    </div> 

    <div class="form-group"> 
    <%= f.label :profile_image %><i> (required)</i> 
    <%= f.file_field :profileimage, class:"form-control" %> 
    </div> 

    <div class="form-group"> 
     <%= f.submit class:"btn btn-primary" %> 
    </div> 

<% end %> 

user_controller:

def sellerprofile 
    @user = User.find(params[:id]) 
    @user.update_attributes(:profilestory => params[:profilestory], :profileimage => params[:profileimage]) 
end 

Для Я использую paperclip и имею has_attached ... код в моей модели.

UPDATE: Вот мое user_params в контроллере:

def user_params 
    params.require(:user).permit(:bankaccname, :profileimage, :profilestory) 
    end 

Когда я использую @user.update(user_params) в методе sellerprofile, я получаю params :user not found error. Эта ошибка возникает при загрузке формы (не на отправке). Ошибка в строке params.require(:user)

UPDATE 2: Вот метод обновления. Я использую это для другой формы, которая берет некоторые данные банковского счета, поэтому я не уверен, могу ли я изменить это для формы профиля.

def update 
    @user.attributes = user_params 
    Stripe.api_key = ENV["STRIPE_API_KEY"] 
     token = params[:stripeToken] 

     recipient = Stripe::Recipient.create(
     :name => user_params["bankaccname"], 
     :type => "individual",    
     :bank_account => token    
     )         

     @user.recipient = recipient.id 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to edit_user_url, notice: 'Your account was successfully updated.' } 
     else 
     format.html { render action: 'edit' } 
     end 
    end 
    end 
+0

Что версия Рельсы в вашем приложении? Если это> = 4, тогда вам нужно использовать сильные параметры. – Mandeep

+0

Rails 4. У меня есть user_params, но когда я использую update (user_params), я получаю сообщение об ошибке params: user not found. – Moosa

+0

Можете ли вы разместить свой код, регистрироваться при отправке формы и полной ошибке? – Mandeep

ответ

1

Если вы посмотрите на свой вопрос, он говорит:

Когда я использую @ user.update (user_params) в методе sellerprofile, я получаю Params: пользователь не найден. Эта ошибка возникает при загрузке формы (а не на представить)

Эта линия говорит нам, что есть что-то не так в действии, где оказанной ваша форма. Я имею в виду URL вы попали в адресную строку браузера, чтобы отобразить вашу форму

И в свой комментарий вы сказали мне, что URL-адрес для рендеринга формы является /seller/:id и теперь давайте посмотрим на вашу форму кода

<%= form_for(@user, url: sellerprofile_path(id: current_user.id), method: :put, html: { :class => 'edit_profile', :multipart => true }) do |f| %> 

Обратите внимание на код, используемый в форме? Вы используете одно и то же действие для визуализации своей формы, а затем после отправки формы оно снова приведет вас к тому же действию, которое является неправильным. Вы должны сделать два разных маршрута. Один, чтобы сделать вашу форму и другую, чтобы создать ее.Чтобы объяснить его дальше, если вы посмотрите на ваш код

def sellerprofile 
    @user = User.find(params[:id]) 
    @user.update_attributes(user_params) 
end 

Так что, когда вы нажмете /seller/:idон принимает вас sellerprofile метод и, следовательно, код внутри вашего метода sellerprofile пожаров и пытается обновить пользователя из-за этого линия @user.update_attributes(user_params) но нет user_params, как вы не представили какой-либо форме, так что вы получите Params: пользователь не найден errorr

Fix:

Просто сделать два различных маршрута, один, чтобы сделать вашу форму и еще один, чтобы создать запись:

match "/seller/:id/new", to: "users#sellernew", via: [:get], as: :sellernewprofile 
match "/seller/:id", to: "users#sellerprofile", via: [:put], as: :sellerprofile 
+0

Отлично! Я должен был добавить пустой метод sellernew и создать html-файлы для этих имен, но он работает! Теперь, когда форма отправляется, она перенаправляет на sellerprofile.html, который похож на обновленное сообщение профиля. Вместо того, чтобы перенаправлять, как мне просто показывать уведомление на странице формы? – Moosa

+0

@Moosa извините, не понял? – Mandeep

+0

, когда форма отправляется, как я могу оставаться на одной странице с флеш-сообщением «обновленный профиль» – Moosa

Смежные вопросы