【问题标题】:Ruby on Rails - No data in Params to save in databaseRuby on Rails - 参数中没有要保存在数据库中的数据
【发布时间】:2017-12-10 13:12:37
【问题描述】:

我的问题和这个问题类似:Ruby on Rails - Data not saved. Index showing blank values

然而,强大的参数与答案相匹配,似乎没有数据通过。

如果我使用 params.require(:banktransaction).permit(...) 我得到一个错误:param is missing or value is empty

如果我删除了需要的部分,则会添加一行但没有值。

我浏览了视图和控制器并检查了我的拼写,我一生都看不到我错过了什么,谁能指出我正确的方向?

控制器:

class BankAccountsController < ApplicationController
  def delete
  end

  def destroy
  end

  def edit
  end

  def update
  end

  def index
    @bankaccount = BankAccount.all
  end

  def show
  end

  def new
    @banktransaction = BankAccount.new(:transactionDate => Time.now, :description => params[:description], :credit => params[:credit], :debit => params[:debit])
  end

  def create
    @banktransaction = BankAccount.new(bank_account_params)
    if @banktransaction.save
      flash[:notice] = "transaction added successfully."
      redirect_to(bank_accounts_path)
    else
      render('new')
    end
  end

  private
    def bank_account_params
      params.require(:banktransaction).permit(:transactionDate,:description,:credit,:debit)
    end
end

查看:

<h1>BankAccounts#new</h1>
<p>Find me in app/views/bank_accounts/new.html.erb</p>
<div class="new transaction">
  <h2>Create Transaction</h2>

  <%= form_for(@banktransaction, :html => {:multipart =>true }) do |f| %>

    <%= render(:partial =>'form', :locals=> {:f => f}) %>

    <div class="form-buttons">
      <%= f.submit("Create Transaction") %>
    </div>

  <% end %>
</div>

表格部分:

<%= f.label(:transactionDate) %>: <%= f.date_field(:transactionDate) %><br>
<%= f.label(:description) %>: <%= f.text_field(:description) %><br>
<%= f.label(:credit) %>: <%= f.number_field(:credit) %><br>
<%= f.label(:debit) %>: <%= f.number_field(:debit) %><br>

路线:

Rails.application.routes.draw do

resources :bank_accounts do
  member do
      get :delete
    end
  end

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

【问题讨论】:

  • 参数丢失或值为空:banktransaction - 并指向私有方法banktransaction
  • 只是为了添加当页面“bank_accounts/new”加载时出现上述错误

标签: mysql ruby-on-rails


【解决方案1】:

简而言之,您只允许错误的参数键。这是bank_account,你的bank_account_params应该是

def bank_account_params
  params.require(:bank_account).permit(:transactionDate,:description,:credit,:debit)
end

Rails 的表单构建器将根据模型名称而不是变量名称构建您的参数。

您的new 操作分配一个BankAccount 实例

  def new
    @banktransaction = BankAccount.new(:transactionDate => Time.now, :description => params[:description], :credit => params[:credit], :debit => params[:debit])
  end

所以表单构建器将使用bank_account 作为参数键而不是变量名banktransaction

【讨论】:

  • 太棒了,我会记住的。
猜你喜欢
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多