2017-01-28 3 views
0

Я использую эшафот в рельсах, чтобы создать приложение, в котором пользователи могут отправлять идеи, а затем все идеи будут перечислены на главной странице. В настоящее время я просто пытаюсь получить функции отправки и распечатки, однако форма, которую эшафот, сгенерированный в файле _form.html.erb, по-видимому, ничего не представляет и не обновляет базу данных. Я не получил ни сообщения «Идея, представленная успешно», ни сообщения «Ошибка представления идеи». Он просто обновляет страницу формы.Rails scaffold form not update database

Мне интересно, проблема с файлом route.rb или что-то в этом роде, потому что, проведя много времени в Интернете, я чувствую, что большая часть моего кода должна работать.

idea.rb

class Idea < ApplicationRecord  
    belongs_to :user 
    belongs_to :category 

    has_many :comments 

    validates :title, :user, :anonymous, :contents, presence: true 
    validates :deleted, inclusion: { in: [true, false]} 

    scope :alive, -> { where deleted: false } 

    def children 
    Comment.where(idea_id: id, deleted: false) 
    end  
end 

ideas_controller.rb

class IdeasController < ApplicationController 

    def index 
    @ideas = Idea.alive.paginate(page: params[:page], per_page: 20) 
    end 

    def show 
    @idea = Idea.find(params[:id]) 
    @comments = @idea.children 
    @reply = Comment.new 
    end 

    def new 
    @idea = Idea.new 
    @categories = Category.all.map{|c| [ c.name, c.id ] } 
    end 

    def new_comment 
    @idea = Idea.find(params[:id]) 
    @comment = Comment.new 
    end 

    def create 
    @idea = Idea.new(idea_params) 
    if @idea.save 
     redirect_to @idea, alert: "Idea submitted successfully." 
    else 
     redirect_to new_idea_path, alert: "Error submitting idea." 
    end 
    end 

    def idea_params 
    params.require(:idea).permit(:title, :contents, :anonymous, :category) 
    end 
end 

_form.html.erb:

<%= form_for @idea do |f| %> 
    <% if idea.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(idea.errors.count, "error") %> prohibited this idea from being saved:</h2> 

     <ul> 
     <% idea.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

<div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
</div> 
<div class="field"> 
    <%= f.check_box(:anonymous) %> 
    <%= f.label(:anonymous, "Hide my name") %> 
</div> 
<div class="field"> 
    <%= f.label :contents %><br /> 
    <%= f.text_area :contents %> 
</div> 
     <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

create_ideas.rb:

class CreateIdeas < ActiveRecord::Migration[5.0] 
    def change 
    create_table :ideas do |t| 

    t.string :title 
    t.text :contents 
    t.boolean "anonymous", limit: 1, default: false 
    t.boolean "deleted", limit: 1, default: false 

    t.timestamps 
    end 
    end 
end 

routes.rb:

Rails.application.routes.draw do 
    resources :ideas 
end 

EDIT: нет никаких следов ошибок самого по себе, потому что я ничего не вижу - страница формы просто перезагружается. Однако, здесь есть выход из журнала сервера:

Started POST "/ideas" for ::1 at 2017-01-28 20:40:07 -0500 
Processing by IdeasController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"5ooCTQZKBv1f1+SlZyl/7tkJzLx95EpckoPBpB710JrikRJqt8wOdE0GT3bjBl1m6wIxKQhzfXmKRrvkV+RHeA==", "idea"=>{"title"=>"sadfsd", "anonymous"=>"1", "contents"=>"sdafasdf"}, "commit"=>"Create Idea"} 
    (0.3ms) begin transaction 
    (0.1ms) rollback transaction 
Redirected to http://localhost:3000/ideas/new 
Completed 302 Found in 26ms (ActiveRecord: 0.4ms) 
+0

опубликовать ошибки след –

+0

@Edmund Lee - Пожалуйста, смотрите редактирование –

ответ

1

У вас есть подтверждение, и вы нарушаете :user присутствия.

В таблице ideas нет столбца user_id, что делает недопустимым отношение belongs_to :user.

Вам нужно изменить перенастройки

class CreateIdeas < ActiveRecord::Migration[5.0] 
    def change 
    create_table :ideas do |t| 

     t.string :title 
     t.text :contents 
     t.boolean "anonymous", limit: 1, default: false 
     t.boolean "deleted", limit: 1, default: false 
     t.integer :user_id, index: true 

     t.timestamps 
    end 
    end 
end 

И запустить миграцию снова, rake db:reset

В качестве альтернативы, вы можете создать еще одну миграцию, чтобы добавить user_id столбец.

В контроллере create, убедитесь, что у вас есть current_user, или каким-либо образом, чтобы заставить пользователя, создавшего idea, и изменения в

@idea = current_user.ideas.new(idea_params)