1

モデルから別のコントローラーにIDを渡そうとすると、多くの問題が発生します。同様の投稿を読んでさまざまな解決策を試しましたが、イベント ID を招待コントローラーに渡すことができないようです。

アップデート

目標は、ユーザーが作成したイベントを見ているときに、招待リンクをクリックすることです。このリンクは、招待状をそのイベントに関連付けることができるように、元のイベントの ID を保存する必要があります。

私のモデルでは、イベント モデルには「has_many "invitations" があり、招待モデルには「belongs_to :events」があります。

これが私のコードです。

Events フォルダー内の show.html.erb:

<%= link_to 'Invite guests', invitations_path(:event => @event.id) %>

このリンクは「invitations#new」に対応しています:

<% provide(:title, 'Invite Guests') %>
<h1>Invite your guests</h1>

   <%= form_for(@invitation) do |f| %>

     <%= render 'shared/error_messages', object: f.object %>

       <%= f.label :name %>
       <%= f.text_field :name, :placeholder => "Name" %> <br>

       <%= f.label :email %>
       <%= f.text_field :email, :placeholder => "Email" %> <br>

    <%= f.submit "Send" %>

招待コントローラー:

def index
end

def new
    @invitation = Invitation.new
end

def create
    user = current_user.events.find(params[:event])
    @invitation = user.invitations.build(params[:invitation])

    if @invitation.save
              flash[:success] = "Invitations sent!"
        redirect_to user
    else
        render '/home'
    end
end

私が交換した場合、私はそれを知っています:

    user = current_user.events.find(params[:event])

と:

    user = current_user.events.find(1)

ルート:

resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :events, only: [:show, :create, :destroy]
resources :invitations, only: [:new, :create]

root to: '/home'

match '/signup',  to: 'users#new'
match '/signin',  to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete


match '/events', to: 'events#new'
match '/invitations', to: 'invitations#new'

すべて正常に動作しますが、もちろん、イベント ID をハードコーディングしているため、これは適切ではありません。私は RoR にかなり慣れていないため (約 2 か月の経験)、これを行うためのより効率的な方法があるかもしれません。そのため、どんな助けでも大歓迎です。

4

1 に答える 1