2012-03-25 89 views
0

我假设的很基本的Rails问题,但我无法弄清Rails的简单性。Rails:为相关模型创建动作

我的简单目标是让用户提交一份表格,说明捐赠金额,并将捐赠链接到用户。我在与在donations_controller.rb

create行动麻烦我有一个User.rb模型和Donation.rb模型。 User.rb has_one :donation和Donation.rb belongs_to :user。我也在使用Devise,所以我有current_user方法。

我的捐款表看起来像这样

class CreateDonations < ActiveRecord::Migration 
    def change 
    create_table :donations do |t| 
     t.integer :amount 
     t.integer :user_id 

     t.timestamps 
    end 
    add_index :donations, [:user_id, :created_at] 
    end 
end 

_form.html.erbdonations_controller.rb看起来像这样

<%= form_for @donation do |f| %> 

    <div class="field"> 
    <%= f.number_field :amount %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Submit" %> 
    </div> 
<% end %> 

在donations_controller.rb的create动作看起来像这样

def create 
    @donation = current_user.donation.build(params[:donation]) 
    if @donation.save 
     flash[:success] = "Donation" 
     redirect_to root_path 
    else 
     render 'home/index' 
    end 
    end 

我得到这个错误m当我提交表单时发送消息。

NoMethodError in DonationsController#create 

undefined method `build' for nil:NilClass 

回答

0

用于构建HAS_ONE关联的方法是current_user.build_donation(params[:donation])