Rails:in_place_select设置一个外键

时间:2010-05-14 14:24:56

标签: ruby-on-rails

我正在尝试使用具有in_place_select方法的Super Inplace Controls插件。我有以下型号:

class Incident < ActiveRecord::Base
  belongs_to              :incident_status
  validates_existence_of  :incident_status
end

class IncidentStatus < ActiveRecord::Base
  has_many :incidents
end

现在,IncidentStatus只是一个ID和一个名字('Open'和'Closed')。在事件的显示视图中,我希望允许用户单击当前状态,并使用选择菜单进行更改。所以在show.html.erb中,我有以下内容:

<p>
    <b>Status:</b>
    <%= in_place_select :incident, :incident_status_id, :choices => @statuses.map { |e| [e.name, e.id] }, :display_text => @status.name %>
</p>

这非常接近Super Inplace Controls文档中给出的示例,即:

<%= in_place_select :employee, :manager_id, :choices => Manager.find_all.map { |e| [e.name, e.id] } %>

这实际上工作正常,直到我点击确定更改字段并提交POST。我看到状态,然后当我点击它时会弹出一个带有'打开'和'关闭'的下拉菜单。当我选择“已关闭”并按好时,表单将消失。以下内容显示在Web服务器控制台中:

Processing IncidentsController#set_incident_incident_status_id (for 127.0.0.1 at 2010-05-14 10:18:43) [POST]
  Parameters: {"commit"=>"OK", "action"=>"set_incident_incident_status_id", "authenticity_token"=>"eahXrzwJwe+h2Byi1ELWXLy0QNmqF2EEXNw+eAfUJwU=", "id"=>"1", "controller"=>"incidents", "incident"=>{"incident_status_id"=>"1"}}

...snip...

ActionController::UnknownAction (No action responded to set_incident_incident_status_id. Actions: admin?, authenticated?, authorized?, create, destroy, edit, index, new, set_incident_incident_status, set_incident_title, show, and update):

所以它似乎在寻找一个方法“set_incident_incident_status_id”。如果我在事件控制器中定义此方法,它似乎没问题,但我不知道如何获取传入的“incident_status_id”=&gt;“1”并将其设置为外键。

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

终于明白了。我需要在事件控制器中创建一个方法。它看起来像这样:

def set_incident_incident_status_id
  @incident = @customer.incidents.find(params[:id])
  @incident.incident_status = IncidentStatus.find(params[:incident][:incident_status_id])
  @incident.save
end

我需要完成它,但这就是要点。