2016-03-28 6 views
1

Ich bin neu bei Rails. Ich möchte Parameter über den Controller an die DB übergeben, aber ich erhalte diesen Fehler param fehlt oder der Wert ist leer: retweet. Ich denke, das Problem ist die Art, Parameter in Sicht zu übergeben.Fehler: Parameter fehlt oder der Wert ist leer: retweet

Hier ist der Ansicht

 <% for @p in @posts %> 

    <div class="panel panel-default post-panel"> 
     <div class="panel-body row"> 

     <div class="col-sm-1"> 
      <img src="/avatar.png" class="rounded-img" height="50px" width="50px"> 
     </div> 
     <div class="col-sm-11"> 
      <p class="post-title"><a href="/user/<%= User.find(@p.user_id).username %>" class="post-owner"><%= User.find(@p.user_id).username %></a> <span class="post-creation">- <%= @p.created_at.to_formatted_s(:short) %></span></p> 
      <p class="post-content"><%= @p.content %></p> 
     </div> 
     <div class="col-sm-12"> 
      <p class="post-links"> 
      <span class="glyphicon glyphicon-comment g-links" aria-hidden="true"></span> 


      **<%= form_for Retweet.new do |f| %> 
       <%= hidden_field_tag current_user.id, (:user_id) %> 
       <%= hidden_field_tag @p.id, (:post_id) %> 
       <%= f.submit "Retweet", class:"btn btn-primary"%>** 


      <% end %> 

Und hier der Controller ist

def new 
     @retweet = Retweet.new 
    end 

    def create 
       @retweet = Retweet.new(post_params) 
       redirect_to(:back) 
    end 

    private def post_params 
      params.require(:retweet).permit(:user_id, :post_id) 
    end 
end 
+0

Nur noch ein paar Anmerkungen: Im fiew, nicht die Variable '@ P' nennen. Für einen, der es in anderen Ansichten zugänglich machen würde, und es ist auch ein sehr schlechter Name. 'post' wäre ein besserer. Verwenden Sie die Hilfsmethode 'image_tag' für' avatar.png'. Sie werden in Schwierigkeiten geraten, wenn Sie ein CDN verwenden. –

Antwort

0

Sie sollten einige Tutorials auf Basis REST-Controller in Rails nachlesen. Deine Erstellungsaktion hat das Retweet nicht gespeichert.

def create 
    @retweet = Retweet.new(post_params) 
    if @retweet.save 
    redirect_to(:back) 
    else 
    render action: 'new' 
    end 
end 

Edit: habe gerade bemerkt, Ihre Form ist alles falsch:

<%= form_for Retweet.new do |f| %> 
    <%= f.hidden_field :user_id, current_user.id %> 
    <%= f.hidden_field :post_id, @p.id %> 
    <%= f.submit "Retweet", class:"btn btn-primary"%>** 
    <% end %> 

Wohlgemerkt, dass Sie die user_id wie dies nicht zulassen, dass settign sollte, ist es sehr einfach, sie zu ändern und damit herumspielen mit deine Daten. Stattdessen sollten Sie dies zu retweet#create hinzufügen:

@retweet.user = current_user 
+0

Ich erhalte immer noch den gleichen Fehler: Parameter: { "UTF-8" => "✓", "authenticity_token" => "TDvi8Poxr3QeNsYTw2JWx13NHevm2CSTvVqzrSxA4z3ZuSnyCe/A/vaiKsCHyW9ddolR/dM8TFhi9et/deB2tQ ==", "post_id" => "16 ", " commit "=>" Retweet "} – John

+0

Ah, ja natürlich. Die versteckten Felder waren nicht im Retweet-Param. Bitte schön. Sie sollten ein Tutorial oder eine grundlegende REST in Rails lesen. Ich habe meine Antwort aktualisiert. –

Verwandte Themen