从嵌套资源的http帖子中保存值?

时间:2017-12-06 08:07:14

标签: ruby-on-rails ruby activerecord

我正在尝试在rails中使用嵌套资源来创建新记录。我试图使用/events/id/entries/new,其中有

<%= form_for([@event, @entry]) do |f| %>

在新页面上。

我的模特是:

class Entry < ApplicationRecord
  belongs_to :user
  belongs_to :event

class User < ApplicationRecord
  has_many :entries, dependent: :destroy

class Event < ApplicationRecord
  has_many :entries, dependent: :destroy

控制器是:

def new
  @event = Event.find(params[:event_id])
  @entry = @event.entries.build
end

def create
  @user = current_user
  @entry = Entry.new(user_id: @user.id, event_id: :event_id , course: :entry.course , siCard: :entry.siCard)
  if @entry.save
    redirect_to @user
    flash.now[:info] = "Event Created"
  else
    render '/create'
    flash.now[:danger] = "Somthing went wrong"
  end
end

但是记录没有保存NoMethodError in EntriesController#create,尽管它说传递的参数是。

"utf8"=>"✓",
"entry"=>{"course"=>"Orange", "siCard"=>"23232323"},
"commit"=>"Enter",
"event_id"=>"2"}

如何修改创建控制器以保存记录?

1 个答案:

答案 0 :(得分:0)

放手一搏:

@entry = Entry.new(
  user_id:  current_user.id, 
  event_id: params[:event_id], 
  course:   params[:entry][:course], 
  siCard:   params[:entry][:siCard]
)

您不需要@user = current_user,只需使用current_user.id

event_id: :event_id只是将event_id设置为符号。我猜你想要访问params值。所以:

event_id: params[:event_id]

这里:

course: :entry.course

您尝试在course符号上调用:entry方法。什么?!?

相反:

course: params[:entry][:course]

siCard相同。

BTW,siCard不是Ruby-ish。相反,你应该si_card