2017-07-16 120 views
-1

我是一个Ruby on Rails编码的新手,我试图从视图中获取一些信息并更新视图。但我遇到过这个问题。form_tag生成不同的路径

首先,我在我的应用程序中有组注释,用户和订阅模型。组注与用户之间存在多对多关系,因此我使用订阅来保留group_notes_id和user_id。现在在我的group_notes表明观点,我有这样的代码:

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

在我的路线文件,我有这样的:

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 

我希望我的表单标签调用addUserToGroupNotes方法在我的组注意控制器。我创建了一个路由路径,但是当我点击提交按钮,它是这样的:?

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

,而不是这样的:

  • group_notes/addUserToGroupNotes

我Group_Notes控制器代码

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 

那么背后有什么问题呢?感谢您的答案。

+0

您使用的是哪种版本的导轨?我只是将你的代码复制并粘贴到我的应用程序,它工作得很好。请提供整个routes.rb文件 – Ptr

+0

我的Rails版本是:5.0.4,还用完整的路由文件代码编辑了我的问题。我使用设计和我的用户模型创建与设计安装。这可能是问题吗? –

+0

奇怪。它应该工作得很好。特别奇怪的是这个** 2 **在'group_notes/2'中。它看起来像你有某种方式重写这个方法什么的。生成的html中是否有'method ='post''?我想我还需要你的控制器代码,或者如果你有我的代码在github或bitbucket上的公共回购只是给我链接,我会看看它。 – Ptr

回答

0

很多事情是格格不入:

  1. 指定请求方法post

    form_tag addUserToGroupNotes_group_notes_path, method: :post ....

  2. 修复路由名称使用Rails的惯例:

    post :add_user_to_notes, :on=>:collection

  3. 解决您的控制器方法名称:

    def add_user_to_notes end

这应该把你在正确的轨道上。