在Rails新模型记录中设置外键

时间:2015-01-24 20:16:51

标签: ruby-on-rails

我有一个带有两个外键的模型。我想在该模型中创建一个新记录并填充外键。我有工作代码。我的问题是,如果有更合适的方式在铁路上这样做。这是模型的SQL:

CREATE TABLE `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(1024) COLLATE latin1_general_ci DEFAULT '',
`date_entered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`goal_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`), ...

以下代码有效: events_controller.rb的相关部分

class EventsController < ApplicationController
  def create
    @event = Event.new(event_params)
    @event.goal_id = params[:goal_id]
    @event.user_id = current_user.id # Assign to whomever is logged in
    if @event.save
      # return to caller. There is no event show page
      redirect_to session.delete(:return_to)
    else
      render 'new'
    end
  end

  def new
    session[:return_to] ||= request.referer
    @event = Event.new
    @event.goal = Goal.find(params[:owner])
  end

private

  def event_params
    params.require(:event).permit( :description, :goal_id)
  end
end

在_new_update_form.html.erb的观点/事件中,我有

  <%= hidden_field_tag 'goal_id', @event.goal_id %>

我提供了隐藏字段,以便在提交表单时将goal_id返回给控制器。

在new.html.erb中查看视图/活动

<%= form_for :event, url: events_path  do |f| %>
  <%= render 'new_update_form', {:f => f, :submit_text => 'Add' } %>
<% end %>

我在这里看到帖子建议在上面的form_for中使用等效的@event代替:event。当我尝试它时它没有用,但我可能一直做错了。

我试图解决的问题是SQL插入失败抱怨缺少goal_id。正如我在开始时提到的,这段代码可行。这是最好的做法吗?

0 个答案:

没有答案