ich eine einfache Variante des einfachen Beispiels von Ajax in Schienen zu machen war: http://guides.rubyonrails.org/working_with_javascript_in_rails.html#a-simple-exampleSchienen Ajax alle partials zu überschreiben, wenn erfrischende Seite
Ich versuche, eine Benutzer-Show Ansicht zu erstellen, in denen neue Beiträge auf Knopfdruck erstellt werden . Diese Beiträge werden alle unterhalb des Nutzers auf der gleichen Anzeigenseite aufgelistet und erscheinen bei der Erstellung.
Die Beiträge werden erstellt, fein und richtig auf der Seite angezeigt, aber wenn ich die Seite meiner
@post = User.posts.build()
überschreibt alle zuvor erstellten Beiträge jedem von ihnen eine nul id geben aufzufrischen. Ist es auch korrekt, create.js.erb in den Views-Ordnern zu platzieren, oder sollte es im Ordner "assets/javascripts" liegen?
Hier sind meine Dateien:
Userscontroller
def show
@user = User.find(params[:id])
@posts = Post.all
@post = @user.posts.build
end
Benutzer/show.html.erb
<%= "user-id: #{@user.id}" %>
<ul id="posts">
<%= render :partial => @posts %>
</ul>
<%= form_for(@post, remote: true) do |f| %>
<%= f.hidden_field :user_id, :value => @user.id %>
<%= f.submit %>
<% end %>
Posts
def create
puts params[:post][:user_id]
@user = User.find(params[:post][:user_id])
puts @user
@post = @user.posts.build()
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.js {}
format.json { render json: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
Rails.logger.info(@post.errors.inspect)
end
end
def index
@posts = Post.all
@post = Post.new
end
Beiträge/_post.html.erb
<li><%= @post.id %></li>
Beiträge/create.js.erb
$("<%= escape_javascript(render @post) %>").appendTo("#posts");
Vielen Dank für die Antwort, ich werde es zu einer Regel machen, um Instanzvariablen in Teiltönen zu vermeiden – Laurence