当我在索引操作中添加模型时,将调用create操作,将模型的实例添加到数据库。这是以下创建操作:
tracks_controller.rb
def create
@track = Track.new(params[:track])
if @track.save
redirect_to(root_url) //Want to change this!
else
@tracks = Track.all
render :action=>"index"
end
end
在每次调用create时,你都可以看到我被重定向到我的根URL(我想要的位置)。但是,如何在不刷新页面的情况下执行此操作?由于正在播放曲目,因此无论何时将某些内容添加到数据库,我都不希望刷新页面。
如果我将此行更改为render :action=>"index"
,那么我的index.html.erb
文件中会收到以下错误
undefined method
各'为零:NilClass`
15: <p>Database is empty!</p>
16: <%else%>
17: <br>
18: <% @tracks.each do |track| %>
19: <div id="list_container">
20: <ul>
21: <li class="list_container">
我如何实现这一目标?
答案 0 :(得分:1)
index.html.erb
需要@tracks
变量。因此,您必须在呈现页面之前进行设置。
例如:
def create
@track = Track.create(params[:track])
@tracks = Track.all
render :action => "index"
end
答案 1 :(得分:1)
最简单,最快捷的方法是向您:remote => true
添加form_for
!
答案 2 :(得分:1)
<强>形式强>
<%= form_for @track, remote: true %>
form fields
<%= f.submit %>
<% end %>
应用/视图/音轨/ create.js.erb 强>
<% if @track.valid? %>
$(".tracks").prepend('<%= j(render(@track)) %>'); // make sure you have _track.html.erb
$("ID OR CLASS OF YOUR FORM")[0].reset(); // this will clear your form inputs
<% else %>
alert('Something Went Wrong');
<% end %>
应用/视图/音轨/ index.html.erb 强>
<div class="tracks">
<% @tracks.each do |track| %>
<%= render :partial => 'track' %>
<% end %>
</div>
应用/视图/音轨/ _track.html.erb 强> 这里有一些代码显示跟踪:
<div>track.id</div>
<div>track.name</div>
答案 3 :(得分:1)
如果您要从表单发布曲目,请将远程设置为true 像
<%=form_for @track, :remote => true do |f| %>
your input fields
<%end %>
index.html.erb
<div id="track_list">
<%= render :partial => 'tracks_record' %>
</div>
_tracks_record.html.erb
<% @tracks.each do |track|%>
your code
<% end %>
控制器中的
def create
@track = Track.create(params[:track])
@tracks = Track.all
respond_to do |format|
format.js
end
end
为create.js.erb创建一个js.erb文件
<% if @track.valid? %>
('#track_list').html('<%= escape_javascript( render :partial => "tracks_record" ) %>');
<% else %>
alert('Could not save');
<% end %>
这将刷新数据并填充新条目而不刷新页面。
答案 4 :(得分:0)
不幸的是,我无法对Debadatt的建议发表评论,但我发现它比最高职位要好得多。我唯一的注意事项是将其更改为
def create
@track = Track.create(params[:track])
@tracks = Track.all
respond_to do |format|
format.js
end
end
到此:
def create
@track = Track.create(params[:track])
@tracks = Track.all
respond_to do |format|
format.js { render layout: false, content_type: 'text/javascript' }
end
end
而且:
('#track_list').html('<%= escape_javascript( render :partial => "tracks_record" ) %>');
到此:
$('#track_list').html('<%= escape_javascript( render :partial => "tracks_record" ) %>');
非常感谢Debadatt