Один из возможных способов сделать это - добавить в форму скрытое поле, которое отражает параметр, который вы передали, если он найден.
Таким образом, если параметр, который вы передаете, является пользователем, по вашему мнению, вы хотите добавить скрытое поле, например:
<input type="hidden" name="user" and value="<%= params[:user] %>" />
или с помощником по рельсам:
hidden_field_tag 'user', params[:user]
Таким образом, код в вашем контроллере может проверять этот параметр на каждом шаге на принимающей стороне и знать, для кого сохранить объект. Примерно так:
def create
@card_signup = CardSignup.new(params[:card_signup])
if params[:user] && params[:user].to_i > 0
##
##some logic here to make sure current_user is admin, as no one else is allowed to do this
##
@card_signup.user_id = params[:user]
else
@card_signup.user_id = current_user.id
end
##onto validating model and saving / redirecting / etc
end
Но конечной целью здесь является сохранение параметров пользователя, будь то начальный параметр GET для страницы или Put / Post из ajax / etc для отправки формы, этот параметр будет около.
Еще один угол безопасности, который нужно проверить, также будет в «новом» действии этого контроллера, и проверьте, что если присутствует параметр пользователя, то current_user является администратором, в противном случае перенаправьте или отобразите сообщение об ошибке. Это в сочетании с повторной проверкой этого при создании должно обеспечить достойный способ убедиться, что никто другой не сможет сделать эти запросы. Вы также можете поместить это в before_filter и вызвать его только для нового и создать, чтобы сохранить вещи в чистоте.