好的,我搜索过高低,阅读教程,观看视频,我仍然没有得到任何与此相关的地方。我在这里读过类似的问题,但问题更复杂或缺乏答案 - 所以这里就是......
我有模特账户和发票。在显示帐户时,我想要一个与该帐户相关的“创建新发票”链接。 (后来我真的喜欢在创建发票时选择一个帐户的选择字段,但我会把它留给另一个痛苦的人。)
这是我的模特...... 帐户:
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>
,然后当我提交表单时,我收到此错误:
InvoicesController中的 ActiveRecord :: AssociationTypeMismatch #create
声明:Account(#2281084000) expected, got String(#2267210740)
随之而来:
app/controllers/invoices_controller.rb:45:in `new'
app/controllers/invoices_controller.rb:45:in `create'
这就是Invoices Controller中的内容:
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
上面是我认为我出错的地方,但是这些线条的内容现在超出了我的范围。我完全是初学者,任何帮助解决这个功能肯定会教会我的负担。
感谢您的时间。
答案 0 :(得分:2)
当您点击New invoice
页面上的/views/accounts/show
链接时,我认为您希望新发票属于此帐户。
因此,在您的表单中,您不必让用户选择帐户。例如,您可以用hidden_field
:
<%= f.hidden_field :account_id, :value => params[:account_id] %>
同样在您的控制器的new
操作中,将@invoice = Invoice.new(:account_id => params[:account_id])
替换为@invoice = Invoice.new
希望这有帮助。
答案 1 :(得分:0)
您没有发布表单的代码,但我猜您正在使用文本字段来处理account
关联。这是错的!
如果您使用文本字段,则rails会尝试将其存储为字符串=&gt; Account(#2281084000) expected, got String(#2267210740)
您需要使用某种关系字段(如下拉菜单或其他任何内容)来选择其中一个已存在的帐户。
那里有很多很好的例子,这可能会对你有所帮助:http://railscasts.com/episodes/102-auto-complete-association-revised