Ruby on rails 没有与[POST]匹配的路线”/故事/身份证/邀请”;

Ruby on rails 没有与[POST]匹配的路线”/故事/身份证/邀请”;,ruby-on-rails,post,routes,Ruby On Rails,Post,Routes,尽管它已经工作了一段时间,但我突然发现了这个错误: 没有与[发布]匹配的路线“/stories/id/invests” 路线: 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 :

尽管它已经工作了一段时间,但我突然发现了这个错误:

没有与[发布]匹配的路线“/stories/id/invests”

路线:

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
邀请/索引视图

<%= 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 %>

如何将post方法添加到我的邀请路径中?

更新您的
路由.rb
以在
资源:邀请中包含
创建
,如下所示:

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

  resources :invites , only: [:index, :show, :destroy, :create ]
end
<%= 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 %>
该更改将生成此新路线:

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

你有各种讨厌的东西

这:

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

resources :stories do
  resources :invites
end
这将给你:

     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
如果你真的想限制你的
邀请
路线,可以。但现在,您限制了
创建
。这就是为什么你会得到:

No route matches [POST] “/stories/id/invites”
因为您告诉rails您不需要创建路径。Rails那样很蠢。照你说的做。不是你的意思

此外,这:

match '/stories/:id/invite',     to: 'invite#show',       via: 'get'
真的充满了邪恶和香蕉鼻涕虫。请不要那样做。对你自己说。或者对我们来说

这:

伙计,这让我想起为什么我不喜欢
erb
。如果你在哈姆做这件事,它会很漂亮,就像独角兽和彩虹一样:

- @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'
你不喜欢独角兽和彩虹吗?看看那些漂亮的
div
,里面有
id
等着穿上你的疯狂忍者技能CSS(
display:inline block
,有人吗?)。(请告诉我您正在使用SASS。请?)

现在,在提交时,您的参数将看起来像(我正在编写
story\u id
和'user\u id'值):

我假设在
邀请\u controller
中,您有如下内容:

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
类邀请控制器
这一切都应该团结在一起

为了我的生命,我不知道你为什么要把你重定向到:new,但是,嘿,不管什么能让你的船浮起来。(您确定不想
重定向到故事路径
重定向到故事路径
?)

<% @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 %>
- @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'
{..., story_id: 4, invite: {user_id: 1}, ...}
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