2011-01-16 32 views
-3

Ich versuche, eine Anwendung zu erstellen, wo Benutzer Shops und zugehörige Shop-Artikel für einen bestimmten Shop frei erstellen können, wenn eine Show-Aktion aufgerufen wird, aber ich scheine etwas falsch zu machen. Jede Hilfe hier wird geschätzt. Ich habe Bilder meines Codes unten beigefügt.Verschachtelte Attribute in ROR

class ShopItem < ActiveRecord::Base 

    belongs_to :shop 

     def self.find_shop_items_for_sale 
     find(:all, :order => "title", :conditions => ["shop_id = ?", @shop.id]) 
     end 

    end 

    class Shop < ActiveRecord::Base 
     has_many :shop_items 
     end 


#Controllers 

     class ShopsController < ApplicationController 

     def new 
     @shop = Shop.new 
     end 

     def create 
     @shop = Shop.new(params[:shop]) 
     @shop.user_id = current_user.id 
     respond_to do |format| 
     if @shop.save 
      flash[:notice] = "Successfully created shop." 
      format.html {redirect_to(all_shops_shops_url)} 
      format.xml {render :xml => @shop, :status => :created, :location => @shop } 
     else 
      format.html {render :action => 'new'} 
      format.xml { render :xml => @shop.errors, :status => :unprocessable_entity } 
     end 
     end 
    end 



    def show 
      @shop = Shop.find(params[:id]) 
      @shop_items = ShopItem.find_shop_items_for_sale 
      @shop_cart = find_shop_cart 
      end 




     class ShopItemsController < ApplicationController 

    def user 
     @per_page ||= 5 
     @user = User.find(params[:id]) 
     @shop_items = ShopItem.find(:all, :conditions=>["user_id = ?", @user.id], :order=>"id desc") 

     end 

    def show 
    @shop_item = ShopItem.find(params[:id]) 
    @shop = @shop_item.shop 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @shop_item } 
    end 
    end 

    # GET /shop_items/new 
    # GET /shop_items/new.xml 
    def new 
    @shop_item = ShopItem.new 

    @shop = Shop.find(params[:id]) 
    #@shop_items = ShopItem.paginate(:all, :condition=>["shop_id] = ?", @shop.id], :order=> "id desc", :page => params[:page],:per_page => @per_page) 
    @shop_items = ShopItem.find(:all, :conditions=>["shop_id = ?", @shop.id], :order=> "id desc") 
    @shop_item.shop_id = params[:id] 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @shop_item } 
    end 
    end 

    # GET /shop_items/1/edit 
    def edit 
    @shop_item = ShopItem.find(params[:id]) 
    end 

    # POST /shop_items 
    # POST /shop_items.xml 
    def create 
    @shop_item = ShopItem.new(params[:shop_item]) 
    @shop_item.user_id = current_user.id 

    respond_to do |format| 
     if @shop_item.save 
     flash[:notice] = 'Shop item was successfully created.' 
     format.html { redirect_to(@shop_item) } 
     format.xml { render :xml => @shop_item, :status => :created, :location => @shop_item } 
     else 

     @shop = Shop.find(@shop_item.shop_id) 
     #@shop_items = ShopItem.paginate(:all, :condition =>["shop_id = ?", @shop.id], :order=> "id desc" , :page => params[:page], :per_page => @per_page) 
@shop_items = ShopItem.find(:all, :conditions =>["shop_id = ?", @shop.id], :order=> "id desc") 

     format.html { render :action => "new" } 
     format.xml { render :xml => @shop_item.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 
+2

Bitte teilen Sie die Codeblöcke in sinnvolle Abschnitte auf. Es gibt eine Menge zu lesen. –

+2

Bitte erklären Sie auch, warum Sie denken, dass Sie es falsch machen. Erhalten Sie Fehler? Passiert etwas Bestimmtes nicht so, wie du es erwartest? –

Antwort

0

Wenn Sie diesen Shop :has_many :shop_items angeben, dann müssen Sie keine Aktionen wie find_shop_items_for_sale angeben. Rufen Sie einfach:

@shop = Shop.find(params[:id]) 
@shop_items = @shop.shop_items 

versuchen auch alle Shop-Artikel für Benutzer retrive (Aktion user) ist eine schlechte Idee. Schauen Sie stattdessen auf will_paginate gem.

Auf der anderen Seite ist Ihre Frage überhaupt keine Frage und es wäre viel einfacher, wenn Sie eine bestimmte Frage stellen oder einfach nur versuchen zu erklären, welche Probleme Sie haben.

+0

Es tut mir leid wegen des großen Codes. Mein Fehler! – user487429

+0

@ Ryan..Es tut mir leid wegen der riesigen Menge Code. Mein Fehler! Mein Problem hier ist, wenn ich versuche, einen Katalog von Artikeln mit einem bestimmten Shop anzuzeigen, bekomme ich einen unbekannten Aktionsfehler. Ich dachte zunächst, es wäre meine Route, aber nicht sicher @klew ... Ich werde Ihren Vorschlag ausprobieren. – user487429

+0

Wenn Sie solch einen Fehler bekommen, dann ist es ein Problem mit Routen. Bitte deine Routen zur Frage stellen. – klew

Verwandte Themen