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
?)