Babol w Agile - żądny poznania błędu i naprostowania kodu

Cześć wam

Nie pisałbym gdybym nie musiał, lecz po 2 godzinach szukania literówki (pewne się znalazły) rozkładam nie tylko me łapy ale też i swój na ogół uparty umysł.
Jako że zaczynam dopiero mą zabawę z RoR’em ciężko jest mi wychwycić, tudzież uzupełnić braki w kodzie a co za tym idzie w książce Agile ( wersja 4 ).
Skłaniam się raczej ku temu iż gdzieś puścili babola aniżeli powinęła mi się noga podczas przepisywania, tym niemniej chcę dowiedzieć się gdzie jest problem w drodze ku zamierzonemu rezultatowi lub też jak przerobić kod by ów osiągnąć
Używam ostatniej wersji Railsinstaller’a i z góry dzięki za wskazówki

jestem na etapie budowania layout’u, który winien wyglądać tak

a wygląda tak. Niby podobnie a jednak nie mogę ściągnąć owego zielonego brzydala na lewą stronę

poniżej kod jak i poprawiony ( jakoby ) application.html.erb ze strony Agile ( http://intertwingly.net/projects/AWDwR4/checkdepot-192-30/section-8.2.html ). Sęk w tym iż patrząc na zdjęcie poniżej widać iż nie mam pliku depot.css, ów poprawiony kod różni się od tego książkowego dopiskiem “” i tym magicznym “depot.css”

index.html.erb

[code]<% if notice %>

<%=notice%>

<% end %>

Your Pragmatic Catalog

<% @products.each do |product|%>

<%= image_tag(product.image_url)%>

<%= product.title%>

<%= sanitize(product.description)%>

<%= product.price%>
	</div>
	</div>
	<% end %>[/code]

store.css.scss

[code].store {
h1 {
margin: 0;
padding-bottom: 0.5cm;
font: 150%sans-serif;
color: #226;
border-bottom: 3px dotted #77d;
}

/*An entry in the store catalog */
.entry {
overflow: auto;
margin-top: 0.5cm;
border-bottom: 1px dotted #77d;
min-height: 100px;

img {
width: 70px;
margin-right: 5px;
margin-bottom: 5px;
position: absolute;

}

h3 {
font-size: 120%;
font-family: sans-serif;
margin-left: 100px;
margin-top: 0;
margin-bottom: 2px;
color: #227;

}

p, div.price_line {
margin-left: 100px;
margin-top: 0.5cm;
margin-bottom: 0.8cm;

}
.price {
color: #44a;
font-weight: bold;
margin-right: 3cm;
}
}
}[/code]
application.html.erb

[code]

Pragprog Books Online Store <%= stylesheet_link_tag "application", :media => "all" %> <%= javascript_include_tag "application" %> <%= csrf_meta_tags %> >
<%=image_tag("logo.png")%> <%=@page_title||"Pragmatic Bookshelf"%>
<%=yield %>
[/code] [b]application.css.scss[/b] [code]#banner { background: #9c9; padding-top: 10px; padding-bottom: 10px; border-bottom: 2px solid; font: small-caps 40px/40px "Times New Roman",serif; color: #282; text-align: center; }

#banner img {float: left;}

#notice {
color: #000 !important;
border: 2px solid red;
padding: 1cm;
margin-bottom: 2cm;
background-color: #f0f0f0;
font: bold smaller sans-serif;
}

#columns {
background: #141;
}

#main {
margin-left: 17cm;
padding-top: 4ex;
padding-left: 2cm;
background: white;
}

#side {
float: left;
padding-top: 1cm;
padding-left: 1cm;
padding-bottom: 1cm;
width: 16cm;
background: #141;

}

#side ul { padding: 0; }
#side li { list-style: 0; }
#side a { color: #bfb;
font-size: small; }[/code]

#side { padding-top: 1cm; padding-left: 1cm; padding-bottom: 1cm; width: 16cm; }
nie cm a em

i zanim wrzucisz, formatuj jakoś kod, bo tego nie da się czytać:

[code=erb]<% if notice %>

<%=notice%>

<% end %>

Your Pragmatic Catalog

<% @products.each do |product|%>

<%= image_tag(product.image_url)%>

<%= product.title%>

<%= sanitize(product.description)%>

<%= product.price%>
    </div>
    </div>
    <% end %>[/code]

:confused:

[code=erb]<% if notice %>

<%= notice %>

<% end %>

Your Pragmatic Catalog

<% @products.each do |product| %>

<%= image_tag(product.image_url) %>

<%= product.title %>

<%= sanitize(product.description) %>

<div class="price_line">
  <span class="price"><%= product.price %></span>
</div>
<% end %>[/code] prawda, że ładniej? :D

[code]- if notice
%p.notice= notice

%h1 Your Pragmatic Catalog

  • @products.each do |product|
    .entry
    = image_tag(product.image_url)
    %h3= product.title
    %p= sanitize(product.description)

    .price_line
    %span.price= product.price[/code]
    Prawda :slight_smile:

’ Agile Web Development with Rails ’ nie opiera się na rails 2?

Wydanie czwarte opiera się o Railsy 3.

Ponownie potknęła mi się noga i tym razem mam problem z ogarnięciem błędu jakim Rails pluje mi w twarz. Wiem czego tyczy ale nie wiem jak sobie z tym poradzić

[quote][color=green]Error:[/color]
[color=grey]test_should_create_cart(CartsControllerTest):[/color]
[color=blue]NoMethodError: undefined method `carts’ [/color] for

*c:/RailsInstalleR/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.1/lib/ac
tion_dispatch/testing/assertions/routing.rb:176:in method_missing' [/i] *[i]depot/test/functional/carts_controller_test.rb:5:inblock in class:CartsControllerTest
[/quote]

[quote][color=green]Error:[/color]
[color=grey]test_should_create_line_item(LineItemsControllerTest): [/color]
[color=blue]NoMethodError: undefined method `line_items’ [/color]for

*c:/RailsInstalleR/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.1/lib/ac
tion_dispatch/testing/assertions/routing.rb:176:in method_missing' [/i] *[i]depot/test/functional/line_items_controller_test.rb:5:inblock in class:LineItemsControllerTest
[/quote]

[quote]application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
private

[color=orange]def [/color] current_cart
Cart.find(session[ [color=orange]:cart_id] [/color] )

[color=orange]rescue[/color]ActiveRecord::RecordNotFound
cart = Cart.create
session[ [color=orange] :cart_id [/color]] = cart.id
cart

[color=orange]end
end[/color][/quote]

[quote]line_items_controller.rb

[color=orange] def create [/color]
[color=blue] @cart [/color] = current_cart
product = Product.find(params[ [color=orange] :product_id [/color] ] )
[color=blue] @line_item [/color] = [color=blue] @cart [/color] .line_items.build(product_id: product)

respond_to [color=orange]do[/color] |[color=blue]format[/color]|
  [color=orange]if[/color] [color=blue]@line_item[/color].save
    format.html { redirect_to [color=blue]@line_item[/color].cart, notice: 'Line item was successfully created.' }
    format.json { render json: [color=blue]@line_item[/color], status: :created, location: [color=blue]@line_item[/color] }[/quote]

[quote]line_items_controller_test.rb

test [color=green]“should create line_item” [/color] [color=orange] do [/color]
assert_difference(‘LineItem.count’) [color=orange] do [/color]
post [color=orange]:create [/color] , product_id: products([color=orange] :ruby [/color] ).id
end

assert_redirected_to cart_path(assigns([color=orange]:line_item [/color]).cart)


end[/quote]

[quote] cart.rb
class Cart < ActiveRecord::Base
has_many [color=orange] :line_items, dependent: :destroy [/color]
end

line_item.rb
class LineItem < ActiveRecord::Base
belongs_to [color=orange]:product [/color]
belongs_to [color=orange] :cart [/color]
end

product.rb
class Product < ActiveRecord::Base
has_many [color=orange] :line_items [/color]
before_destroy [color=orange] :ensure_not_referenced_by_any_line_item [/color]

ensure that there are no line items referencing this product

private

[color=orange]def[/color] ensure_not_referenced_by_any_line_item
[color=orange] if [/color]
line_items.empty?
return [color=orange]true [/color]
[color=orange] else[/color]
errors.add(:base, [color=green] ‘Line items present’ [/color])
return [color=orange] false[/color]

[color=orange]end
end
end [/color][/quote]

Ja niestety nie pomogę, więc trochę OT, ale podobnie jak poprzednicy radzę zacząć zwracać jakąkolwiek uwagę na indentację :slight_smile:
Szczególnie, że przecież nie zabiera to ani trochę czasu, natomiast pomaga go oszczędzić, kiedy do kodu albo dopuszcza się kogoś innego, albo wraca się do niego po jakimś czasie.

sek w tym iż część z tego co tutaj zostało przeniesione oddaje oryginalną formę - chociażby line_items_controller_test.rb no, może poza end , który się rozjechał. Podobnie ma się sprawa z product.rb, po dodaniu tagów et cetera obrał taką formę jak widać powyżej. Zdaje sobie sprawę o ile łatwiej jest się znaleźć mając porządek - wierz mi, jestem pedantyczny w swym pokoju :wink: choć w kodzie nie znalazłem jeszcze swej wizji :stuck_out_tongue: lecz to nie temat na dzisiaj ^.-.
Aktualnie wiszę od wczoraj gdyż w którymś miejscu coś zostało źle napisane ( Agile kazał tak napisać, toteż napisałem ) i nie bardzo wiem jak uczynić to zjadliwym dla Rails’a. Grzebię w google’ach i czytam szukając podobnego problemu ale niestety nie idzie to tak jakbym tego chciał ;/ toteż udzielam się tutaj by nie czuć się bardziej zagubionym niż jestem próbując samemu ogarnąć temat Ruby’iego i RoR od podstaw :stuck_out_tongue:

chciałbym nadmienić iż wklejenie powyższego kodu wraz z wiadomością zjadło dobrą godzinę, blisko do drugiej w nocy siedziałem :stuck_out_tongue: by może dziś jakiś doby człek wyjaśnił mi co ten brzydki Agile chciał mi wcisnąć, dlaczego tak być nie może i jak kod winien wyglądać poprawnie ^.-

Edit: wieczorem wrzuce na Github’a

rozowykubek weź to udostępnij gdzies na githubie i daj znaka

Depot został wrzucony na Github’a
https://github.com/rozowykubek/work

Reasumując: czynności/działy -->

  1. Finding a Cart --> scaffold cart
  2. Connecting Products to Carts --> scaffold line_item product_id:integer cart_id:integer
  3. Adding a Button --> dodawanie produktów do koszyka i wyświetlanie jego zawartości. Dział po którym następuje książkowy rake test:functionals i error’y [color=blue]NoMethodError: undefined method `carts’ [/color] i [color=blue] line_items [/color]
  • application_controller.rb

  • line_items_controller.rb

  • line_items_controller_test.rb

  • cart.rb

  • product.rb

  • line_item.rb

done, sprawdz githuba będziesz tam miał pull requesta, pooglądaj zmiany. i popraw test :slight_smile: