2016-04-01 21 views
0

Beer Receipe sayfalık bir sayfam var. rails c'a bir çift ekledim ve Beer Receipe sayfasında iyi görünüyor. Ancak, formun kendisinde derecelendirmeyi oluşturmaya çalıştığımda, hem yıldız hem de yorum formda boş görünüyor ve raylara c baktığımda nil değerini gösteriyor. Niye ya? Beer_Receipe, Bileşen, & Puanlama Bu şema olduğununil değeri form değeri yerine

:

create_table "beer_receipes", force: :cascade do |t| 
    t.string "name" 
    t.string "style" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "ingredients", force: :cascade do |t| 
    t.string "name" 
    t.string "category" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "ratings", force: :cascade do |t| 
    t.string "ratable_type" 
    t.integer "ratable_id" 
    t.integer "stars" 
    t.text  "comments" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

Onların dernekler

şunlardır:

class BeerReceipe < ActiveRecord::Base 
    has_many :ratings, as: :ratable, dependent: :destroy 
end 

class Ingredient < ActiveRecord::Base 
    has_many :ratings, as: :ratable, dependent: :destroy 
end 

class Rating < ActiveRecord::Base 
    belongs_to :ratable, polymorphic: true 
end 

Bu Beer Receipe Index

<p id="notice"><%= notice %></p> 

<h2>Beer Receipe Index</h2> 

<p> 
    <strong>Name:</strong> 
    <%= @beer_receipe.name %> 
</p> 

<p> 
    <strong>Style:</strong> 
    <%= @beer_receipe.style %> 
</p> 

<h2>Ratings</h2> 
<%= render @beer_receipe.ratings %> 

<h2>Add Ratings</h2> 
<%= render 'ratings/form' %> 

<%= link_to 'Edit', edit_beer_receipe_path(@beer_receipe) %> | 
<%= link_to 'Back', beer_receipes_path %> 
olduğunu

üç model var

Bu

class RatingsController < ApplicationController 
    def new 
    end 

    def create 
    @beer_receipe = BeerReceipe.find(params[:beer_receipe_id]) 
    @rating = @beer_receipe.ratings.create(rating_params) 
    #redirect_to beer_receipe_path(@beer_receipe) 
    end 

    def destroy 
    @beer_receipe = BeerReceipe.find(params[:beer_receipe_id]) 
    @rating = @beer_receipe.ratings.find(params[:id]) 
    @rating.destroy 
    redirect_to beer_receipe_path(@rating) 
    end 

    def edit 
    end 

    def update 
    end 

    private 

    def rating_params 
     params.require(:rating).permit(:star, :comment) 
    end 
end 

DÜZENLEME

Started POST "/beer_receipes/1/ratings" for 127.0.0.1 at 2016-04-01 15:14:43 -0700 
Processing by RatingsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"3kilQgA3tZ0ZxsfuRY4LKFkNl3+oL1x9zRT2/EccDeM0b+6a1NuHgo6cHaYOqBJMd6s4dduID06i5oTvcBisTw==", "rating"=>{"stars"=>"6", "comments"=>"testing .."}, "commit"=>"Create Rating", "beer_receipe_id"=>"1"} 
    [1m[35mBeerReceipe Load (0.2ms)[0m SELECT "beer_receipes".* FROM "beer_receipes" WHERE "beer_receipes"."id" = ? LIMIT 1 [["id", 1]] 
Unpermitted parameters: stars, comments 
    [1m[36m (0.1ms)[0m [1mbegin transaction[0m 
    [1m[35mSQL (0.6ms)[0m INSERT INTO "ratings" ("ratable_id", "ratable_type", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["ratable_id", 1], ["ratable_type", "BeerReceipe"], ["created_at", "2016-04-01 22:14:43.982989"], ["updated_at", "2016-04-01 22:14:43.982989"]] 
    [1m[36m (38.6ms)[0m [1mcommit transaction[0m 
    Rendered ratings/create.html.erb within layouts/application (0.1ms) 
Completed 200 OK in 437ms (Views: 351.6ms | ActiveRecord: 40.8ms) 


Started GET "/" for 127.0.0.1 at 2016-04-01 15:16:03 -0700 
Processing by BeerReceipesController#index as HTML 
    [1m[35mBeerReceipe Load (0.8ms)[0m SELECT "beer_receipes".* FROM "beer_receipes" 
    Rendered beer_receipes/index.html.erb within layouts/application (14.7ms) 
Completed 200 OK in 686ms (Views: 668.5ms | ActiveRecord: 1.3ms) 


Started GET "/beer_receipes/2" for 127.0.0.1 at 2016-04-01 15:16:06 -0700 
Processing by BeerReceipesController#show as HTML 
    Parameters: {"id"=>"2"} 
    [1m[36mBeerReceipe Load (0.6ms)[0m [1mSELECT "beer_receipes".* FROM "beer_receipes" WHERE "beer_receipes"."id" = ? LIMIT 1[0m [["id", 2]] 
    [1m[35mRating Load (0.3ms)[0m SELECT "ratings".* FROM "ratings" WHERE "ratings"."ratable_id" = ? AND "ratings"."ratable_type" = ? [["ratable_id", 2], ["ratable_type", "BeerReceipe"]] 
    Rendered ratings/_rating.html.erb (1.3ms) 
    Rendered ratings/_form.html.erb (8.1ms) 
    Rendered beer_receipes/show.html.erb within layouts/application (90.6ms) 
Completed 200 OK in 140ms (Views: 134.6ms | ActiveRecord: 1.1ms) 


Started POST "/beer_receipes/2/ratings" for 127.0.0.1 at 2016-04-01 15:16:11 -0700 
Processing by RatingsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"WmwvDG+a/YsgGKpOGtlxQLUCNjyc/+y3lhab5ZO9WPCwS2TUu3bPlLdCcAZR/2gkm6SZNu9Yv4T55On2pLn5XA==", "rating"=>{"stars"=>"3", "comments"=>"sdfsdf"}, "commit"=>"Create Rating", "beer_receipe_id"=>"2"} 
    Rendered ratings/create.html.erb within layouts/application (0.3ms) 
Completed 200 OK in 104ms (Views: 101.5ms | ActiveRecord: 0.0ms) 
+0

Uygulama günlüklerini paylaşabilir misiniz? –

+0

Params.inspect''i, neler olduğunu görmek için oluşturma eylemine koyabilir misiniz? – toddmetheny

+0

@toddmetheny, "ratings_controller'" ifadesini kastediyorsunuz? – user273072545345

cevap

0

eylem oluşturmak derecelendirmelerinizin denetleyicisi bu deneyin _form.html.erb sayfa

<%= form_for([@beer_receipe, @beer_receipe.ratings.build]) do |f| %> 
    <p> 
     <%= f.label :stars %><br> 
     <%= f.select :stars, (0..10) %> 
    </p> 
    <p> 
     <%= f.label :comments %><br> 
     <%= f.text_field :comments %> 
    </p> 
    <p> 
     <%= f.submit %> 
    </p> 
    <% end %> 

Ve son olarak, ama en az, Puanlar Kontrolör geçerli:

@rating = Rating.new(stars: params[:rating][:star], comments: params[:rating][:comments], ratable_id: params[:beer_recipe_id]) 

if @rating.save 
    puts "huzzah!" 
end 

Bu işe yararsa bana bildirin.

+0

Yukarıdaki kodunuzu yapıştırdıktan sonra bir derecelendirme oluşturmaya çalışırken aldığım budur: '/beerfulPolymorphic/app/controllers/ratings_controller.rb : 11: sözdizimi hatası, beklenmedik anahtar kelimeler_if, 'bekliyor') '@ – user273072545345

+0

bu satırın referansı ise:' @ @ rating.save ' – user273072545345

+0

Önceki satırda parantezleri kapatmayı unuttum. sabit. Derecelendirme def satırına bir '' '' ekleyin ve çalışması gerekir. @ user27307254534534534543675765 – toddmetheny