2015-03-25 2 views
0

Я работаю над своим приложением spree rails, и по некоторым причинам я делаю некоторые собственные методы. Я создал новый и создаю методы в ProductController, но последний из них не работает, он не сохраняет данные в моей базе данных, и я не могу понять, почему.Сохранить не работает, spree custom method

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

module Spree 
    class ProductsController < Spree::StoreController 
    before_action :load_product, only: :show 
    before_action :load_taxon, only: :index 

    rescue_from ActiveRecord::RecordNotFound, :with => :render_404 
    helper 'spree/taxons' 

    respond_to :html 

    def index 
     @searcher = build_searcher(params.merge(include_images: true)) 
     @products = @searcher.retrieve_products 
     @taxonomies = Spree::Taxonomy.includes(root: :children) 
    end 

    #########################################by_cjdc############################################################# 

    def newproduct 

     @product = Product.new(); 

     #render '/spree/home/newproduct' 

    end 

    def createproduct 

     @name = params[:product][:name]; 
     @description = params[:product][:description]; 


     @product = Product.new({ 
           :id => 4, 
           :name => @name, 
           :description => @description}); 

     @product.save(); 

     if @product.save() 
     redirect_to "/tutienda", :notice => "El producto ha sido insertado"; 
     else 
     render '/spree/products/newproduct' 
     end 

    end 

    ###################################################################################################### 

    def show 
     @variants = @product.variants_including_master.active(current_currency).includes([:option_values, :images]) 
     @product_properties = @product.product_properties.includes(:property) 
     @taxon = Spree::Taxon.find(params[:taxon_id]) if params[:taxon_id] 
    end 

    private 
    def accurate_title 
     if @product 
     @product.meta_title.blank? ? @product.name : @product.meta_title 
     else 
     super 
     end 
    end 

    def load_product 
     if try_spree_current_user.try(:has_spree_role?, "admin") 
     @products = Product.with_deleted 
     else 
     @products = Product.active(current_currency) 
     end 
     @product = @products.friendly.find(params[:id]) 
    end 

    def load_taxon 
     @taxon = Spree::Taxon.find(params[:taxon]) if params[:taxon].present? 
    end 
    end 
end 

И мои методы NewProduct и createproduct. Я даже попробовал whitn и прервал перед @ product.save, чтобы посмотреть, что в объекте, и объект имеет данные, но тогда БД не получает его. (Извините за мой плохой английский).

+0

Замените 'save' на' save! 'И исправьте проблемы проверки. –

+0

Спасибо, это сработало хорошо, я нуб. –

ответ

0

Первое, что вам действительно не нужно ; после каждой строки, ror не требует этого.

Другое дело, если данные не получают сохранение в БД, тогда вы должны убедиться в отсутствии каких-либо ошибок проверки. Теперь, как проверить, какая проверка не позволяет сохранить. Чтобы узнать, что использовать метод bang с сохранением.

save -> save! 

! bang метод выдаст исключение, если какая-либо проверка не будет выполнена. Затем просто проверьте ошибку и исправьте ее.