2017-07-16 3 views
-1

Ich bin ein Newbee in Ruby on Rails Codierung und ich habe versucht, einige Informationen aus der Sicht zu bekommen und die Ansicht zu aktualisieren. Aber ich habe mit diesem Problem konfrontiert.form_tag erzeugt einen anderen Pfad

Zuallererst habe ich Gruppenanmerkung, Benutzer und Abonnementmodelle in meiner Anwendung. Es gibt eine Viele-zu-Viele-Beziehung zwischen Gruppenhinweis und Benutzer, also benutze ich ein Abonnement, um group_notes_id und user_id zu behalten. Jetzt in meinem group_notes Ansicht zeigen, habe ich diesen Code:

<%= form_tag addUserToGroupNotes_group_notes_path do %> 
    <%= text_field_tag :eMail %> 
    <%= submit_tag "Add User to group note" %> 
<% end %> 

In meiner Routen-Datei i dieses:

Rails.application.routes.draw do 

    resources :group_notes 

    resources :group_notes do 
    post :addUserToGroupNotes, :on=>:collection 
    end 

    resources :items 

    resources :personal_notes do 
     member do 
     patch :complete 
     end 
     resources :items 
    end 

    devise_for :users 

    resources :items 
    root 'personal_notes#index' 

end 

ich meine Form-Tag wollen addUserToGroupNotes Methode in meiner Gruppe Note Controller aufzurufen. Ich habe für sie einen Weg Weg, aber wenn ich auf die Schaltfläche Senden klicken geht es wie folgt aus:?

  • group_notes/2 UTF8 = ✓ & authenticity_token = 9zN5NHaPEtXAREwkhQY2iHrNJ% 2FA

statt dessen:

  • group_notes/addUserToGroupNotes

Mein Group_Notes Controller-Code

class GroupNotesController < ApplicationController 
    before_action :find_group_note, only: [:show,:edit,:update,:destroy] 

    def index 
     if user_signed_in? 
      @group_notes = current_user.group_notes.order("created_at DESC") 
     end 
    end 


    def addUserToGroupNotes 
     eMail = params['eMail'] 
     user = User.where(:email => eMail).take 
     @groupNoteID = session[:currentGroupNote] 
     record = Subscription.where(:user_id => user.id, :group_note_id => @groupNoteID).take 

     if user.nil? || !record.nil? 
      redirect_to group_notes_path 
     else 
      @newSubscription = Subscription.new(:user_id => user.id, :group_note_id => @groupNoteID) 
      @newSubscription.save 
      redirect_to group_note_path(@groupNoteID) 
     end 
    end 


    def show 
     @currentGroupNote = params[:id] 
     session[:currentGroupNote] = @currentGroupNote 
     currentSubscription = Subscription.where(:group_note_id => @currentGroupNote) 
     @users = [] 

     currentSubscription.each do |subscription| 
      user = User.where(:id => subscription.user_id) 
      @users += user if user 
     end 

     @items = GroupItem.where(:group_note_id => @currentGroupNote) 
    end 

    def addItem 
     item = params['item'] 
     @groupNoteID = session[:currentGroupNote] 
     @newItem = Item.new(:description => item, :group_note_id => @groupNoteID) 
     @newItem.save 
     redirect_to group_note_path(@groupNoteID) 
    end 

    def new 
     @group_note = current_user.group_notes.build 
    end 

    def create 
     @group_note = current_user.group_notes.build(group_note_params) 
     user = User.find(current_user) 
     groupNote = @group_note 
     groupNote.users << user #Adding user to group 

     if @group_note.save 
      redirect_to root_path 
     else 
      render 'new' 
     end 
    end 

    def edit 
    end 

    def update 
     if @group_note.update(group_note_params) 
      redirect_to group_note_path(@group_note) 
     else 
      render 'edit' 
     end 
    end 

    def destroy 
     @group_note.destroy 
     redirect_to root_path 
    end 


    private 
     def group_note_params 
      params.require(:group_note).permit(:title, :description, :noteType) 
     end 

     def find_group_note 
      @group_note = GroupNote.find(params[:id]) 
     end 
end 

also was könnte das Problem dahinter sein? Danke für die Antworten.

+0

Welche Version von Schienen verwenden Sie? Ich habe Ihren Code einfach kopiert und in meine App eingefügt, und es funktioniert einwandfrei. Bitte gib ganze routes.rb an. Datei – Ptr

+0

Meine Version von Rails ist: 5.0.4, auch meine Frage mit vollem Code der Routes-Datei bearbeitet. Ich benutze Devise und mein Benutzermodell wird mit Devise Installation erstellt. Kann es das Problem sein? –

+0

Seltsam. Es sollte gut funktionieren. Besonders komisch ist das ** 2 ** in 'group_notes/2'. Es sieht so aus, als hättest du diese Methode oder etwas irgendwie überschrieben. Gibt es 'method = 'post' in generiertem HTML? Ich denke, ich brauche auch Ihren Controller-Code oder wenn Sie unseren Code auf öffentlichen Repo auf GitHub oder BitBucket haben, senden Sie mir Link und ich werde es mir ansehen. – Ptr

Antwort

0

Viele Dinge sind fehl am Platz:

  1. die Request-Methode als post angeben:

    form_tag addUserToGroupNotes_group_notes_path, method: :post ....

  2. die Routennamen Fix Schienen Konventionen zu verwenden:

    post :add_user_to_notes, :on=>:collection

  3. Fix Ihre Controller-Methode Name:

    def add_user_to_notes end

Dies sollte man auf dem richtigen Weg.

Verwandte Themen