如何在没有提交表单的情况下将值传递给rails模型方法?

时间:2013-10-24 08:32:05

标签: ruby ruby-on-rails-3 jquery

我的模型中有一个类如下:

class Project::Area < ActiveRecord::Base
  attr_accessor :cancel_id
  def save_loc_values
    update_record = Project::Loc.find_by_Project_Reference(project.Project_Reference)
    update_record.update_attributes({
      Status: 'D',
      Cancellation_Date: DateTime.now().strftime("%Y-%m-%d %T.%L"),
      CancellationReason_id: self.cancel_id
    })
  end
end

在我的form中,使用attr_accessor字段

<%= form_for @area, remote: true, html: {data: {save_warning_form: true}} do |f| %>
  <%= form_error(f) %>
  <%= f.text_field :cancel_id %>
  <%= link_to 'omit', save_loc_values_project_areas_path(area_id: @area.id, cancel_id: @area.cancel_id), remote: true, method: :post %>
<% end %>

我在controller中为我的自定义方法创建了一条路线,如下所示,

def save_loc_values
  @area = Project::Area.find(params[:area_id])
  @return = @area.save_loc_values
end

它中的问题正常工作并将StatusCancellation_Date的值保存到另一个数据库表中。但On change cancel_id值未保存。如何传递和保存onchange cancel_id

谢谢,我真的很感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

问题是:您没有使用cancel_id中设置的view

只需将cancel_id中的params传递给save_loc_values @return = @area.save_loc_values(params[:cancel_id]) update_attributes行为,并将其与<%= form_for @area, url: save_loc_values_project_areas_path, method: :post remote: true, html: {data: {save_warning_form: true}} do |f| %> <%= form_error(f) %> <%= f.text_field :cancel_id %> <%= f.submit 'omit' %> <% end %>

一起使用

更新:

{{1}}

答案 1 :(得分:1)

你可以这样做:

<强> HTML

 <%= link_to_function "ommit", "ommit('#{@ommit.id}')" %>

<强> JS

function ommit(id)
{
  $.ajax({
    url:"/your_controller_name/save_loc_values",
    dataType: "json",
    data: "ommit_id=" + id + "&cancel_id=" + $('#cancel_id').val(),
    type: 'GET/POST'# your method type
  });
}

<强>控制器

def save_loc_values
  @area = Project::Area.find(params[:area_id])
  @return = @area.save_loc_values(params[:cancel_id])
end

<强>模型

def save_loc_values(cancel_id)
    update_record = Project::Loc.find_by_Project_Reference(project.Project_Reference)
    update_record.update_attributes({
      Status: 'D',
      Cancellation_Date: DateTime.now().strftime("%Y-%m-%d %T.%L"),
      CancellationReason_id: cancel_id
    })
end