我正在尝试Ajax化Ruby on Rails应用程序,以避免在用户交互后重新加载每个页面。
我现在设法在幕后创建一个新想法,但是一旦创建它就不显示它。
这是我的代码:
在观点视图中表单:
<div id="new_proposition_form" style="display:none">
<%= form_for(@new_proposition, :remote => true) do |f| %>
<%= f.text_field :title, :class => "proposition_input", :id => "new_proposition_input" %>
<%= f.hidden_field :created_by %>
<%= f.hidden_field :father_id %>
<%= f.hidden_field :procontra %>
<%= f.hidden_field :created_at %>
<% end %>
</div>
在构思控制器中创建操作:
def create
@idea = Idea.new(params[:idea])
@idea.created_at = Time.now
respond_to do |format|
if @idea.save
format.html { redirect_to play_path, :notice => 'Idea was successfully created.' }
format.json { render :json => @idea, :status => :created, :location => @idea }
format.js
else
format.html { render :action => "new" }
format.json { render :json => @idea.errors, :status => :unprocessable_entity }
end
end
end
在观点视图中create.js.erb:
$("<%= escape_javascript render(:file => 'ideas/new_proposition.html.erb') %>").insertBefore('#end_of_propositions_list');
其中“end_of_propositions_list”是显示的构思列表的唯一标识符。
我正在努力解决的问题如下:
如果观点视图中的 new_proposition.html.erb 视图如下:
<div>
New proposition added
</div>
代码不是指任何对象或变量,它的工作方式,即用户可以看到发生了什么的确认。因此,我知道在浏览器中启动的远程操作命中控制器,该控制器点击了部分视图的javascript模板。
现在我希望新创建的想法出现,使用部分检索其属性并处理格式。 我觉得我需要将新创建的想法的id从ideas控制器中的create action传递给format.js调用的create.js脚本,然后传递给partial,以便它知道从数据库中提取什么想法
我不知道如何处理从创建控制器操作传递到create.js和部分视图的参数,非常感谢您的帮助。
答案 0 :(得分:2)
对我来说好看......?那么接下来要做的是将实例变量@idea从控制器传递给partial:
$("<%= escape_javascript render(
:file => 'ideas/new_proposition.html.erb',
:idea => @idea) %>")
.insertBefore('#end_of_propositions_list');
然后在您的视图中访问@idea:
<div>New proposition added</div>
<div>Title: <%= @idea.title => </div>
希望有所帮助
答案 1 :(得分:0)
在该控制器呈现的视图中,您可以使用@访问变量,因此在create.js中您可以直接访问@ idea.id