2017-05-23 9 views
-2

Ganz plötzlich erhalte ich diesen Fehler, auch wenn es eine Zeit lang gearbeitet hat:Keine Route treffer [POST] "/ stories/id/lädt"

Keine Route treffer [POST] „/ Geschichten/id/lädt“

Routen:

story_invites_path GET /stories/:story_id/invites(.:format) invites#index 

routes.rb

resources :stories do 
    match '/stories/:id/invite', to: 'invite#show', via: 'get' 

    resources :invites , only: [:index, :show, :destroy ] 
end 

lädt ein/index Ansicht

<%= form_for @invite , :url => story_invites_path do |f2| %>   
    <%= f2.text_field :user_id, :value => user.id , :class => 'number_field' %> 
    <%= f2.submit 'Send', class: 'btn btn-primary' %> 
<% end %> 

lädt Controller

def create 
    @invite = @story.invites.new(invite_params) 

    if @invite.save 
    flash[:success] = 'The user was invited!' 
    redirect_to(:back) 
    else 
    render :new 
    end 
end 

Wie kann ich einen Beitrag Methode meiner lädt ein Pfad hinzufügen?

Antwort

1

Sie haben alle Arten von ekligen Dinge ...

Dies ist:

resources :stories do 
    match '/stories/:id/invite',  to: 'invite#show',  via: 'get' 
    resources :invites , only: [:index, :show, :destroy ] 
end 

Sollte sein:

resources :stories do 
    resources :invites 
end 

die Ihnen:

 story_invites GET /stories/:story_id/invites(.:format)   invites#index 
        POST /stories/:story_id/invites(.:format)   invites#create 
    new_story_invite GET /stories/:story_id/invites/new(.:format)  invites#new 
edit_story_invite GET /stories/:story_id/invites/:id/edit(.:format) invites#edit 
     story_invite GET /stories/:story_id/invites/:id(.:format)  invites#show 
        PATCH /stories/:story_id/invites/:id(.:format)  invites#update 
        PUT /stories/:story_id/invites/:id(.:format)  invites#update 
        DELETE /stories/:story_id/invites/:id(.:format)  invites#destroy 
      stories GET /stories(.:format)        stories#index 
        POST /stories(.:format)        stories#create 
     new_story GET /stories/new(.:format)       stories#new 
     edit_story GET /stories/:id/edit(.:format)      stories#edit 
      story GET /stories/:id(.:format)       stories#show 
        PATCH /stories/:id(.:format)       stories#update 
        PUT /stories/:id(.:format)       stories#update 
        DELETE /stories/:id(.:format)       stories#destroy 

Wenn Sie möchten, beschränken Sie Ihre invite Routen wirklich in Ordnung. Aber im Moment beschränkst du dich auf create. Welches ist wirklich, warum Sie bekommen:

No route matches [POST] “/stories/id/invites” 

Weil du Schienen GESAGT Sie einen Pfad erstellen wollte nicht. Rails ist dumm auf diese Weise. Tut was du sagst. Nicht was Sie bedeuten.

Auch dies:

match '/stories/:id/invite',  to: 'invite#show',  via: 'get' 

gerade ist wirklich voll von Schlechtigkeit und Bananenschnecken. Bitte tu das nicht. Zu dir selbst. Oder zu uns.

Dies:

<%= form_for @invite , :url => story_invites_path do |f2| %> 
    <%= f2.text_field :user_id, :value => user.id , :class => 'number_field' %> 
    <%= f2.submit 'Send', class: 'btn btn-primary' %> 
<% end %> 

braucht wahrscheinlich mehr wie folgt aussehen:

<%= form_for :invite, story_invites_path(story) do |f2| %> 
    <%= f2.hidden_field :invite, :user_id, value: @user.id %> 
    <%= f2.submit 'Send', class: 'btn btn-primary' %> 
<% end %> 

Verwenden :invite statt @invite, weil Sie in index sind und Sie haben wahrscheinlich nicht einen @invite.Wenn du es tust, gut. Schienen können jedoch das Symbol verwenden, um auf die richtigen Felder zu schließen.

Sie werden look up, dass hidden_field Methode, weil ich dies aus dem Speicher tun müssen.

Und ich weiß nicht, wo Sie story von bekommen werden, weil Sie in Ihrer index Methode sind. Aber Sie können etwas wie @stories = Story.all tun. In diesem Fall wird dieser ganze Block muss in etwas eingewickelt wie:

<% @stories.each do |story| %> 
    <%= story.name %> 
    <%= form_for :invite, story_invites_path(story) do |f2| %> 
    <%= f2.hidden_field :invite, :user_id, value: @user.id %> 
    <%= f2.submit 'Send', class: 'btn btn-primary' %> 
    <% end %> 
<% end %> 

Mann, das macht mich erinnern, warum ich erb nicht mögen. Wenn Sie dies in HAML tun, wäre es schön sein, wie Einhörner und Regenbogen:

- @stories.each do |story| 
    .story-container{id: "story-id-#{story.id}"} 
    .story-name 
     = story.name 
    .story-invite-container 
     = form_for :invite, story_invites_path(story) do |f2| 
     = f2.hidden_field :invite, :user_id, value: @user.id 
     = f2.submit 'Send', class: 'btn btn-primary' 

Sie nicht, Einhörner und Regenbogen mögen? Sieh dir all die schönen divs mit ids und classes an, die nur darauf warten, mit deinem Hintern, mad-ninja-skills CSS (display: inline-block, jemand?) Geschmückt zu werden. (Bitte sagen Sie mir, Sie verwenden SASS Bitte.?)

nun auf einreichen, Ihre params etwas aussehen werden (ich bin, aus denen die story_id und ‚user_id` Werte):

{..., story_id: 4, invite: {user_id: 1}, ...} 

ich in invites_controller annehmen, haben Sie so etwas wie:

class InvitesController < ActionController::Base 

    def index 
    ... 
    @stories = Story.all 
    ... 
    end 

    def create 

    @story = Story.find_by(id: params[:story_id]) 
    @invite = @story.invites.new(invite_params) 

    if @invite.save 
     flash[:success] = 'The user was invited!' 
     redirect_to(:back) 
    else 
     render :new 
    end 

    end 

    def invite_params 
    params.require(:invite).permit(:user_id) 
    end 

end 

Und das alles sollte zusammen hängen.

Für das Leben von mir, ich weiß nicht, warum Sie redirect_to :new, aber hey was auch immer schwimmt Ihr Boot. (Sind Sie sicher, dass Sie nicht möchten redirect_to stories_path oder vielleicht redirect_to story_path?)

0

Aktualisieren Sie Ihre routes.rbcreate in Ihrem resources :invites, wie diese schließen:

resources :stories do 
    match '/stories/:id/invite', to: 'invite#show', via: 'get' 

    resources :invites , only: [:index, :show, :destroy, :create ] 
end 

Diese Änderung dieser neuen Route generieren:

story_invites POST /stories/:story_id/invites(.:format) invites#create 
Verwandte Themen