Ошибка маршрутизации Rails 3 в отношении в has_many => через ассоциацию - PullRequest
0 голосов
/ 28 сентября 2011

Мои модели настроены следующим образом:

 class User
 has_many :memberships, :dependent => :destroy
 has_many :groups, :through => :memberships

 Class Group
 has_many :memberships, :dependent => :destroy
 has_many :users, :through => :memberships

 Class Membership
 attr_accessible :user_id, :group_id
 belongs_to :user
 belongs_to :group

My MembershipController # create

def create
  @membership = current_user.memberships.build(:group_id => params[:group_id])
  if @membership.save
    flash[:notice] = "You have joined this group."
    redirect_to :back
  else
    flash[:error] = "Unable to join."
    redirect_to :back
  end
end

У меня есть ресурсы: членство в моих маршрутах, чтобы он мог найти действие create.

Наконец, в моем действии Group # show я хочу, чтобы пользователь мог присоединиться к группе. Итак, я создал этот form_tag

<%= form_tag(membership_path) do %>
    <%= hidden_field_tag @group.id %>
    <%= submit_tag "Join Group"%>
<% end %>

Возвращает следующую ошибку:

Routing Error

No route matches [POST] "/memberships/1"

Я запустил рейк-маршруты, чтобы попытаться понять, чего мне здесь не хватает:

членство GET /memberships(.:format) {: action => "index",: controller => "членство"} POST / memberships (.: Format) {: action => "create", controller => "memberships"} new_membership GET /memberships/new(.:format) {: action => "new", controller => "Memberships"} edit_membership GET /memberships/:id/edit(.:format)‹:action=>"edit ", controller =>" членство "}

членство GET /memberships/:id(.:format) {: action => "show",: controller => "memberships"} PUT /memberships/:id(.:format)‹:action=>"update ",: controller =>" Memberships "} DELETE /memberships/:id(.:format) {: action => "destroy",: controller => "memberships"}

Кто-нибудь видит ошибку моих путей?

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

Разве вы не хотите публиковать сообщения на memberships_path, а не members_path? Похоже, ошибка указывает, что он не может найти маршрут POST для членства из-за того, что на самом деле нет маршрута для: членство для POST,: только членство.

0 голосов
/ 28 сентября 2011

путь "new_membership" не так ли?new_membership_path, если вы делаете form_tag. Или вы всегда можете использовать form_for и визуализировать его через частичное в вашем представлении.

0 голосов
/ 28 сентября 2011

Мой быстрый взгляд на это; <%= form_tag(membership_path) do %> не должно быть <%= form_tag(@membership) do %> 'или <%= form_tag(membership_path(@membership)) do %>.

...