Ruby on Rails 将 id 传递给新的创建表单



好的,我已经搜索了高低,阅读了教程,观看了视频,但我仍然没有得到任何进展。我在这里读过类似的问题,但问题更复杂或缺乏答案 - 所以这里是......

我有模型帐户和发票。显示帐户时,我想要一个与该帐户相关的"创建新发票"的链接。(稍后我实际上想要一个选择字段来在创建发票时选择一个帐户,但我会把它留给另一个痛苦)。

这是我的模型...帐户:

class Account < ActiveRecord::Base
  attr_accessible :name, :invoice 
  attr_accessible :name, :invoice
  has_many :invoices
end

和发票:

class Invoice < ActiveRecord::Base
  belongs_to :account
  attr_accessible :amount_pretax, :amount_total, :date_sent, :project, :status, :tax, :account, :account_id
end

现在,在我的/views/accounts/show.html.erb

<p id="notice"><%= notice %></p>
<p>
  <b>Name:</b>
  <%= @account.name %>
</p>
<%= link_to 'New Invoice', new_invoice_path(:account_id=>@account.id) %>
<%= link_to 'Edit', edit_account_path(@account) %> |
<%= link_to 'Back', accounts_path %>

所以,正在发生的事情是,当我单击"新发票"链接时,它会显示新表单,其中帐户字段填充了以下奇怪的文本: #<Account:0x10fe16bc0>然后当我提交表单时,我收到此错误:活动记录::关联类型发票中的不匹配控制器#创建有了这个声明:Account(#2281084000) expected, got String(#2267210740)随之而来的是:

app/controllers/invoices_controller.rb:45:in `new'
app/controllers/invoices_controller.rb:45:in `create'

这是发票控制器中的内容:

def new
  @invoice = Invoice.new(:account_id => params[:account_id])
  respond_to do |format|
  format.html # new.html.erb
  format.json { render :json => @invoice }
  end
end
def create
  @invoice = Invoice.new(params[:invoice])
   ....
end

以上是我认为我出错的地方,但这些台词目前超出了我的范围。我完全是一个初学者,任何解决此功能的帮助肯定会教我负载。

谢谢你的时间。

当您单击/views/accounts/show页面上的New invoice链接时,我想您希望您的新发票属于此帐户。

因此,在您的表单中,您不必让用户选择帐户。例如,您可以将相应的字段替换为hidden_field

<%= f.hidden_field :account_id, :value => params[:account_id] %>

同样在控制器的new操作中,将@invoice = Invoice.new(:account_id => params[:account_id])替换为@invoice = Invoice.new

希望这有帮助。

您没有发布表单的代码,但我想您正在使用文本字段来处理account关联。这是错误的!

如果您使用文本字段,则 Rails 将尝试将其存储为字符串 => Account(#2281084000) expected, got String(#2267210740)

您需要使用某种关系字段(如下拉列表或其他任何字段)来选择已存在的帐户之一。

有很多很好的例子,这可能会帮助你:http://railscasts.com/episodes/102-auto-complete-association-revised

相关内容

  • 没有找到相关文章

最新更新