簡體   English   中英

單擊提交后,Rails 不保存條目

[英]Rails not saving entry after clicking submit

在安裝 Devise gem 之前,我的應用程序運行良好。 安裝 Devise 后,當我單擊表單上的提交時,它會重新加載同一頁面並且不會將條目保存到表中。 它應該重定向到“詢問”頁面,詢問用戶是否有更多條目。 我已經從這個網站嘗試了多種解決方案,但它們似乎都不起作用,所以我想發布這個問題以使其正常工作並了解正在發生的事情。 命名可能會令人困惑。 我的第一個模型是成員,具有輸入字段、gifttext、配偶和配偶禮物。 安裝 Devise 后,我放置了一個包含電子郵件和加密密碼字段的用戶模型。

我的 members_controller.rb:

class MembersController < ApplicationController

include MembersHelper
def new
  @member = Member.new
end  
def index
    @members = Member.all
end
def destroy 
    @member = Member.find(params[:id])
    @members = Member.destroy(params[:id])
    redirect_to members_path
end
def create
   @member = Member.new(member_params)
if @member.save
  redirect_to :action => 'ask'
else
  render :action => 'new'
end
end
def ask
end
def show
end
def update
    @article = Member.find(params[:id])

    if @member.update(member_params)
        redirect_to @member
    else
        render 'edit'
        end
    end
def results
    @matches = prints
end
def member_params
      params.require(:member).permit(:input, :gifttext, :spouse, :spousegift)
end

end

我的應用程序控制器:

class ApplicationController < ActionController::Base
  before_action :authenticate_user!
end

我的會員.rb:

class Member < ApplicationRecord
    belongs_to :user
end

我的用戶.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
end

我的 _form.html.erb:

<%= form_with(model: @member, local: true ) do |f| %>
<p>Who is the participant?</p>
<div class="field">
    <%= f.label :person %>
    <%= f.text_field :input %>
</div>
<p>What gifts would they like?</p>
<div class="field">
  <%= f.label :gifts %>
  <%= f.text_field :gifttext %>
</div>
<p>Who, if anyone, is their spouse? If they don't have one you can leave this field blank</p>
<div class="field">
  <%= f.label :spouse %>
  <%= f.text_field :spouse %>
</div>
<p>What gifts would they like? If there is no spouse then you can leave this field blank.</p>
<div class="field">
  <%= f.label :gifts %>
  <%= f.text_field :spousegift %>
</div>
  <div class="action">
  <%= f.submit "Submit" %>
</div>
  <%= link_to 'Matches', members_results_path(@member) %>
<% end %>

我的路線.rb:

Rails.application.routes.draw do
  devise_for :users
  get 'members/new'
  get 'members/results'
  get 'members/index'
  get 'names/new'
  get 'names/results'
  get 'names/index'
  root 'members#new'
  post 'members/new'
  get 'members/ask'
  resources :members
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

我對用戶模型的遷移:

# frozen_string_literal: true

class AddDeviseToUsers < ActiveRecord::Migration[5.2]
  def self.up
    change_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.inet     :current_sign_in_ip
      # t.inet     :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      # Uncomment below if timestamps were not included in your original model.
      # t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    # add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,         unique: true
  end

  def self.down
    # By default, we don't want to make any assumption about how to roll back a migration when your
    # model already existed. Please edit below which fields you would like to remove in this migration.
    raise ActiveRecord::IrreversibleMigration
  end
end

我的會員遷移:

class CreateMembers < ActiveRecord::Migration[5.2]
  def change
    create_table :members do |t|
      t.string :input
      t.string :gifttext
      t.string :spouse
      t.string :spousegift

      t.timestamps
    end
  end
end

如果您需要任何其他信息,請告訴我。

您的 MembersController#update 方法使用@article實例變量。 你可能指的是@member

def update
  @member = Member.find(params[:id])

  if @member.update(member_params)
    redirect_to @member
  else
    render 'edit'
  end
end

您的創建操作看起來不太正確,您需要設置用戶並正確重定向:

def create
  @member = Member.new(member_params)
  @member.user = current_user
  if @member.save
    redirect_to ask_member_path(@member)
  else
    render 'new'
  end
end

_form.html.erb

<%= @member.errors.inspect %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM