Я пытаюсь разрешить пользователю читать, обновлять или уничтожать форму, которую они сами создали. У меня проблемы.CanCan: Может делать RUD, но не C
В моем ability.rb, я
can [:update, :read, :destroy], Form.where(:user => user)
при условии, что пользователь является атрибутом формы. Я могу получить формы (и ответы на формы) для отображения, когда у меня нет этой строки в классе способностей, но я, очевидно, не хочу, чтобы люди могли удалять формы других пользователей. Я уже звонил
load_and_authorize_resource
, чтобы вызвать CanCan в контроллере. В настоящее время я эту ошибку:
The can? and cannot? call cannot be used with a raw sql 'can' definition. The checking code cannot be determined for :index Form(id: integer, user_id: integer, policy: boolean, two_adult: boolean, training: boolean, attribute_name: boolean, attribute: boolean, agree_to_form: boolean, user_signature: string, signature_date: date, printed_date: datetime, created_at: datetime, updated_at: datetime)
(Изменены некоторые имена для личной жизни я также использую Завещание, кстати, если это меняет что-нибудь.)
Любая помощь будет принята с благодарностью. Благодаря!
Edit: Будет ли решение, как ...
can :read, Form do |form|
form.user == user
end
быть возможность?
Edit2: Мой взгляд ...
<% @forms.each do |form| %>
<tr>
<td><%= form.user %></td>
<td><%= form.policy %></td>
<td><%= form.two_adult %></td>
<td><%= form.training %></td>
<td><%= form.other_attribute %></td>
<td><%= form.attribute %></td>
<td><%= form.agree_to_covenant %></td>
<td><%= form.user_signature %></td>
<td><%= form.signature_date %></td>
<td><%= form.printed_date %></td>
<% if can? :read, @form %>
<td><%= link_to 'Show', form %></td>
<% end %>
<% if can? :update, @form %>
<td><%= link_to 'Edit', edit_form_path(form) %></td>
<% end %>
<% if can? :destroy, @form %>
<td><%= link_to 'Destroy', form, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
</tr>
<% end %>
Я также заметил на обновив страницу, что хэш-пользователь изменяет каждый раз. Это проблематично.
Edit3: Ability.rb информация Документы, касающиеся ...
if user.is_camper?
can :read, Camp
can :read, Payment, Payment.where(:user => user)
can :create, Payment
can :read, Form, :user => user.id
Here is a visual of what happens too.
Престола, это вещь. Он должен работать, но это не так. В настоящее время он просто скрывает все параметры, и я даже создал форму с текущим пользователем. Мне интересно, замечает ли он, что текущий пользователь создал форму. Кроме того: пользователь является атрибутом в моей форме, поэтому я изменил код, чтобы отразить это, но, к сожалению, не повезло. – Ryan
Как я понимаю, у вас есть некоторые проблемы на странице ... Опубликовать свое мнение – gotva
Я отредактирую исходное сообщение, чтобы уточнить. – Ryan