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