Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solve zad6 #265

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Solve zad6 #265

wants to merge 1 commit into from

Conversation

jmichalak9
Copy link

No description provided.

@ahawrylak ahawrylak added the zad6 label Dec 11, 2018
@ahawrylak ahawrylak self-assigned this Dec 11, 2018
Copy link
Collaborator

@ahawrylak ahawrylak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dzięki za rozwiązanie! 🎉 Potrzeba kilku poprawek, ale ogólnie kod wygląda okej 👍

end
def show
@customer = Customer.find(params[:id])
@products = @customer.products.order(price: :desc)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order(price: :desc) można przerzucić do modelu jako scope, zgodnie z ostatnim wykładem 😉

class Product < ApplicationRecord
has_many :product_categories
has_many :categories, through: :product_categories
belongs_to :customer
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

brak opcji optional: true sprawia, że nie można stworzyć produktu, który nie jest jeszcze przypisany do żadnego customera 😢

def index
@customers = Customer.all
end
def show
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zgodnie z zadanie, produkty należące do customera powinny być wyświetlane pod adresem /customers/:customer_id/products. Teraz jest to /customers/:customer_id. Zauważ, że ten show jest trochę mylący. Oczekiwalibysmy, że dostaniemy tutaj profil pojedynczego customera a dostajemy produkty 🤔 Żeby to poprawić należałoby:

  • zanestować odpowiednio ścieżki
# config/routes.rb

resources :customers, only: :index do
  resources :products, only: :index
end

Taki zapis rzeczywiście tworzy ścieżkę /customers/:customer_id/products, która odpowiada akcji index w kontrolerze ProductsController, czyli wszystko jest na swoim miejscu - CustomersController zajmuje się customerami a ProductsController produktami. 😉

</tr>
</thead>
<tbody>
<% @products.each do |product| %>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wyświetlanie pojedynczego produktu nadaje się na oddzielny plik, z którego można wielokrotnie skorzystać 😉

@@ -1,3 +1,5 @@
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :customers
resources :products
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tak jak pisałem wyżej, żeby otrzymać odpowiednie ścieżki trzeba użyć:

resources :customers do
  resources :products
end

Zauważ też, że niesprecyzowanie o jakie dokładnie akcje nam chodzi(resources :customers, only: :index) powoduje powstanie całej masy niepotrzebnych i niezaimplementowanych routes:
screen shot 2018-12-11 at 15 38 42

@ahawrylak ahawrylak added the ✓ Done in the summary it is considered as done label Dec 11, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✓ Done in the summary it is considered as done zad6
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants