Jquery 在不重定向到rails中的新路径的情况下创建新对象

Jquery 在不重定向到rails中的新路径的情况下创建新对象,jquery,ruby-on-rails,ajax,ruby-on-rails-3,Jquery,Ruby On Rails,Ajax,Ruby On Rails 3,我按照post在rails中创建了新的事件\标准\选项对象,而没有重定向到新的\事件\标准\选项\路径。我想直接将表单放在页面中,而不重定向到新路径。我想将其放在事件/显示视图中,我的关系是Event has_many:Event_criterias,Event_criterias has_many:Event_criterias选项 编辑2: 这是我的控制器: def create @event_criteria_option = EventCriteriaOption.new(params[

我按照post在rails中创建了新的事件\标准\选项对象,而没有重定向到新的\事件\标准\选项\路径。我想直接将表单放在页面中,而不重定向到新路径。我想将其放在事件/显示视图中,我的关系是Event has_many:Event_criterias,Event_criterias has_many:Event_criterias选项

编辑2:

这是我的控制器:

def create
@event_criteria_option = EventCriteriaOption.new(params[:event_criteria_option])

respond_to do |format|
  if @event_criteria_option.save
    flash[:notice] = "Event criteria option successfully created"
    format.html { redirect_to(event_criteria_path(EventCriteria.find(@event_criteria_option.event_criteria_id)), :notice => 'Event criteria option was successfully created.') }
    format.xml  { render :xml => @event_criteria_option, :status => :created, :location => @event_criteria_option }
    format.js { redirect_to event_path(Event.find(session[:event_id])) }
    #render :js => @event_criteria_option, :status => :created, :location => @event_criteria_option, :layout => !request.xhr?
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @event_criteria_option.errors, :status => :unprocessable_entity }
    format.js { render :js => @event_criteria_option.errors, :status => :unprocessable_entity }
  end

end
结束

我的看法是:

<% if !event_criteria.is_free && !event_criteria.is_exclusive %>
        <td>Show options <%= check_box_tag "show_event_criteria_options"+cont.to_s, "event_criteria_options"+cont.to_s, false, :class => "check_buttons" %></td>
    <% end %>
    </tr>
    </table>

    <div id="event_criteria_options<%=cont.to_s%>", style="display: none;" >    
        <% session[:event_id] = @event.id  %>
        <%= form_for (:event_criteria_option, :remote => true, :url => {:id => 'event_criteria_option_form', :controller => "event_criteria_options", :action => "create", :format => :js}) do |f| %>
          <%= f.hidden_field :event_criteria_id, :value => event_criteria.id %>
          <%= f.label :value, "Event criteria option value"%>
          <%= f.text_field :value %>
          <%= f.submit "Add option value", :disable_with => 'Adding option value...'%>
        <% end %>

显示选项“检查按钮”%>
true,:url=>{:id=>'event\u criteria\u option\u form',:controller=>“event\u criteria\u options”,:action=>“create”,:format=>:js})do | f |%>
事件\u标准id%>
“正在添加选项值…”%>

使用此代码,远程表单工作并创建一个事件\标准\选项。此外,我还创建了create.js.erb空文件,您的代码更改@event\u criteria\u选项的@value会给我一个错误。但问题是,当我按下复选框时,我用jQuery显示远程表单。当它重定向回event/xx路径时,带有event\u criteria\u选项的远程表单被隐藏,需要再次按下复选框以显示它们。你明白吗?jeje我该怎么解决?感谢看这篇文章,了解如何使用Ajax调用控制器方法,这样就不必重定向到新路径

希望这对你有帮助

编辑1:改用
form_标签

<%= form_tag('/event_criteria_options/new', :remote => true, :format => :js) do %>
  <%= hidden_field_tag :event_criteria_id, :value => event_criteria.id %>
  <%= label_tag :value, "Event criteria option value"%>
  <%= text_field_tag :value%>
  <%= submit_tag "Add option value", :disable_with => 'Adding option value...'%>
<% end %>
检查这个URL,看看它是否能在任何方面帮助你。

编辑3

由于正在创建对象,因此只需使用操作名称创建一个新文件,在本例中,
views
相关目录中的
create.js.erb
包含以下内容:

create.js.erb 在控制器的顶部放上:

class EventCriteriaController < ApplicationController
  respond_to :html, :js

  def create
  .
  .
  end
end

我想你需要使用
fields\u来帮助你完成这个任务。你使用的Rails版本是什么?如果Rails 3或更高版本,则在link\u to中查找:remote=>true,如果Rails 2,则link\u to\u remote将是Rails中AJAX的解决方案。您的模型关系看起来如何?你可能想看一些关于你的情况的屏幕广播。事件有多个:事件标准,事件标准有多个:事件标准选项但我不想要嵌套表单,我想为事件标准创建新的事件标准选项,我不想为现有事件标准创建表单_options@Tomas我已经编辑了上面的答案。检查这是否适用于您。@托马斯,我已经更改了语法。看一看。
$('body').html("<p>New Event Criteria Option created successful! </p>").append("<br /><b><%= escape_javaScript(@value) %></b>");
def new
 @event_criteria_id = params[:event_criteria_id]
 @value = params[:value]
 @event_criteria_option = EventCriteriaOption.create!(:event_criteria_id =>    @event_criteria_id, :value => @value)
 respond_with(@value)
end
class EventCriteriaController < ApplicationController
  respond_to :html, :js

  def create
  .
  .
  end
end
class EventCriteriaController < ApplicationController
  respond_to :html, :js

  def create
    session[:checked] = true
  .
  .
  end
end
<% if session[:checked] %>
.
.
# code to make your checkbox with check value
<% else %>
# code to make your checkbox unchecked 
.
<% end %>