2013-11-02 2 views
1

У меня есть проект рельсов, в котором я должен сохранять данные подписчиков в базе данных, не обновляя страницу!Моя форма не хранит параметры в модели

Итак, я закодировал кнопку Ajax. когда я нажимаю кнопку, появляется всплывающее предупреждение и возвращает идентификатор нового пользователя, который только что был создан. Проблема в том, что я смотрю на консоль рельсов для последней записи модели User.last все поля записи ноль (кроме ID). Как я могу исправить эту проблему?


маршруты:

users_new GET /users/new(.:format) users#new 
    users GET /users/index(.:format) users#index 
    create POST /users/create(.:format) users#create 

вот мой вид в приложение/просмотров/пользователей/new.html.haml

.form1 
    %h1 
    Subscriber 
    =form_for @user do |form| 
    - unless @user.errors.empty? 
     - @user.errors.full_messages.each do |message| 
     .alert.alert-danger 
      %ul 
      - @user.errors.full_messages.each do |message| 
       %li= message 
    %div{ :data => { :role => :content} } 
     .row.form-group 
     .col-lg-3 
      %label 
      Email: 
      =form.text_field :email, :class => 'form-control' 
     .row.form-group 
     .col-lg-3 
      %label 
      Name: 
      =form.text_field :name, :class => 'form-control' 
     .row.form-group 
     .col-lg-3 
      %label 
      Phone Number: 
      =form.text_field :phone_number, :class => 'form-control' 
     .row.form-group 
     .col-lg-3 
      %label  
      Address: 
      =form.text_field :address, :class => 'form-control' 
     %ui-grid-a 
     %ui-block-a 
      %a.primary{ :data => { :role => :button, :remote => create_path, :parent => '.form1', :success => 'saved' } } Save 

Это контроллер:

class UsersController < ApplicationController 

    def index 
    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new params[:user] 
    @user.save 
    render :json => @user 
    end 

end 

My js file:

function saved(user){ 
    alert(user.id); 
} 
+0

Ваш JS-файл является '.js.erb'? –

+0

Нет, файл .js – Kasra

ответ

0

Есть целый ряд вещей, которые могли бы вызвать эту проблему

Учитывая вы Рельсы новичку (Добро пожаловать!), я подумал, что лучше очертить проблемы в ответе, а не в комментариях


routes.rb

Там есть функция в рельсах маршрутов, называемых resources - это позволяет создать ряд рельсов маршрутов через вызов одной функции - resources :controller

Вы, кажется, вручную объявляя свои маршруты, которые, как правило, считается плохой практикой для общего functi Дополнения, как new или create я советую вам сначала изменить свой routes.rb файл следующим образом:

#app/config/routes.rb 
resources :users 

Это даст вам набор предварительно созданных маршрутов, который вы держите свой код эффективным


Users_Controller.rb

#/app/controllers/users_controller.rb 
def create 
    @user = User.new params[:user] 
    @user.save 
    render :json => @user 
    end 

у вас есть большая проблема здесь

Вы используете AJAX (это Javascript) и неправильно обрабатываете запрос. Вам действительно нужно использовать respond_to для обработки заголовка типа запроса, и убедиться, что вы будете в состоянии взаимодействовать с приложением надлежащим образом

Попробуйте это:

#/app/controllers/users_controller.rb 
def create 
    @user = User.new params[:user] 
    @user.save 

    respond_to do |format| 
     format.js 
     format.json { render :json => @user } 
     format.html 
    end 
end 

Что-то вы должны убедиться, это вы знать различия между JSON & стандартным вызовом «Javascript» через Ajax.JSON - это в основном способ обработки небольших массивов (называемых объектами JSON), которые могут быть переданы через ajax; в то время как полный Javascript вызов имеет гораздо больше возможностей


Create.js.erb

.js.erb в основном такая же, как .html.erb

В вашем create.js.erb, вы полагаетесь на объект JSON для возвращения ваш новый идентификатор пользователя. Хотя это можно считать O.K, я думаю, вы можете сделать его более эффективным, полностью отрезав объект json.

В create.js.erb вам не нужны какие-либо функции для запуска вещей. Он просто работает как HTML Посмотреть, и поэтому вы должны просто поставить код вы хотите выстрелил:

#/app/views/users/create.js.erb 
alert(<%=j @user.id %>); 

Хотя методология здесь правильно, я не знаю, если он будет выводить ничего, потому что мы не явно передавая переменную @user

+1

Нет проблем приятель. Однако я заметил, что при использовании функций 'create' вам нужно будет включить [' strong_params'] (http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html). Если вам нужна помощь в этом, я могу отредактировать свой ответ –

+0

Я получил его, не нужно! ;) – Kasra

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