2015-10-07 2 views
1

Je suis un débutant aux rails et j'essaie d'apprendre autant que possible .. Je Je suis actuellement en train de développer une application de rails très basique qui montre les messages et permet d'ajouter un post avec des images, de les éditer et de les supprimer aussi sans échafaudages. Voici mon code,Mon application rails lève la méthode non définie `post_post_path 'exception .. J'essaie d'utiliser' Paperclip 'pour attacher l'image à mon modèle déjà existant

Controller: wall_controller.rb

class WallController < ApplicationController 
def show_all 
    @feeds = Post.all 
end 
def add 
    @feeds = Post.create(params[:feeds]) 
    @feeds.save 
    unless @feeds.valid? 
    flash[:error] = @feeds.errors.full_messages.join("<br>").html_safe 
    else 
    #set flash[:success] to "Feed added successfully" 
    end 
redirect_to :action => 'show_all' 
end 
end 

Vue: show_all.html.erb

<div id = "add_feeds"> 
<%= form_for(@feeds,:method => "post",:html => { :multipart => true }) do |f| %> 
<div class="form-group"> 
<%= f.text_field :content_text %> 
<%= f.file_field :pic, class: 'form-control'%> 
</div> 
<%= f.submit 'Upload', class: 'btn btn-primary' %> 
<% end %> 
</div> 
<div id="container"> 
<ul> 
    <% @feeds.each do |feed| %> 
    <div id ="posts" class = "well"> 
    <li id=feed> 
    <%= image_tag feed.pic.url %> 
     <i> 
     <%= feed.content %> 
     </i> 
     <%= link_to "Edit", "wall/#{feed.id}/edit_feed" %> 
     <%= link_to "Delete", "wall/#{feed.id}"%> 
    </li> 
    </div> 
    <% end %> 
    <ul> 
</div> 

Modèle: post.rb

class Post < ActiveRecord::Base 
    attr_accessible :content ,:pic 
    has_attached_file :pic, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" 
    validates_attachment_content_type :pic, content_type: /\Aimage\/.*\Z/ 
end 

Schéma:

ActiveRecord::Schema.define(:version => 20151006014835) do 

    create_table "posts", :force => true do |t| 
    t.text  "content" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    t.string "pic_file_name" 
    t.string "pic_content_type" 
    t.integer "pic_file_size" 
    t.datetime "pic_updated_at" 
    end 
end 

fichier routes.rb

match "home" => "wall#show_all", via: :get 
    match "home" => "wall#add", via: :post 

je besoin d'aide dans laquelle je me trompe .. Merci à l'avance .. `

Répondre

1

Je suis un débutant aux rails

Bienvenue!


Tout d'abord, lire sur CRUD et comment il applies to rails ...

enter image description here

#app/controllers/walls_controller.rb 
class WallsController < ApplicationController 
    def index 
     @feeds = Post.all 
    end 
    def new 
    @feed = Post.new feed_params 
    if @feed.save 
     flash[:error] = @feeds.errors.full_messages.join("<br>").html_safe 
    else 
     render :all, success:"Feed added successfully" 
    end 
    end 

    private 

    def feed_params 
     params.require(:feed).permit(:content_text, :pic) 
    end 
end 

Vous besoin chercher comment les rails devraient gérer les différentes actions à l'intérieur du contrôleur. Vos méthodes show_all et add sont complètement contre la convention (c'est pourquoi vous avez des problèmes). En outre, consultez object orientation in Rails; vous devriez vraiment appeler vos modèles de la même manière que vos contrôleurs (au début) - @feeds = Post.all est déroutant comme l'enfer.

#config/routes.rb 
root "walls#index" 
resources :walls #-> note the plurality 

#app/views/walls/index.html.erb 
<%= link_to "New", new_feed_path %> 
<% @feeds.each do |feed| %> 
    <%= image_tag feed.pic.url %> 
    <%= feed.content %> 
    -- 
    <%= link_to "Edit", feeds_edit_path(feed) %> 
    <%= link_to "Delete", feeds_path(feed), method: :delete %> 
<% end %> 

#app/views/walls/new.html.erb 
<%= form_for @feed do |f| %> 
    <%= %= f.text_field :content %> 
    <%= f.file_field :pic %> 
    <%= f.submit %> 
<% end %> 
+0

Merci! Maintenant, je peux voir où je vais mal .. – user2860954