我正在关注https://coderwall.com/p/rqjjca/creating-a-scoped-invitation-system-for-rails,我遇到了这个
<%= form_for @invite , :url => invites_path do |f| %>
<%= @invite.story_id=1 %>
<%= f.hidden_field :story_id, :value => @invite.story_id %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.submit 'Send' %>
<% end %>
我在本教程中迷失了,因为我找不到示例代码。
究竟是什么:url标签?那可以硬编码进行测试吗?
class InvitesController < ApplicationController
def create
@invite = Invite.new(invite_params)
@invite.sender_id = current_user.id
@invite.recipient = 1
end
def invite_params
params.require(:story).permit(:title, :body, :user_id)
end
end
我该如何处理?
答案 0 :(得分:2)
关于你问题的主题,我认为这是你收到的错误。在这种情况下,这意味着您的@invite
变量为nil
。在本教程中,它指出作者将表单放在用户组的“edit
视图”上。所以在你的控制器中,你需要引用那个变量。像这样:
def edit
@invite = Invite.find(params[:id])
end
关于:url
问题:
:url
选项是表单提交的网址。
以下是docs中的内容:
:url - 要提交表单的网址。这可以用与传递给url_for或link_to的值相同的方式表示。例如,您可以直接使用命名路由。当模型由字符串或符号表示时,如上例所示,如果未指定:url选项,默认情况下表单将被发送回当前url(我们将在下面描述一个替代的面向资源的用法form_for,其中不需要明确指定URL。
在本教程的前面您添加了:
resources :invites
到routes.rb
文件。这将为邀请创建命名路由。
您可以通过输入rake routes
来查看这些内容。
这将是这样的:
invites GET /invites(.:format) invites#index
POST /invites(.:format) invites#create
new_invite GET /invites/new(.:format) invites#new
edit_invite GET /invites/:id/edit(.:format) invites#edit
invite GET /invites/:id(.:format) invites#show
PATCH /invites/:id(.:format) invites#update
PUT /invites/:id(.:format) invites#update
DELETE /invites/:id(.:format) invites#destroy
因此,通过将form_for :url => invites_path
放入,这意味着您将把表单提交到'/ invites'路由,这与邀请#sedex action相关。
答案 1 :(得分:0)
您需要在控制器中添加新的def
def new
@invite = Invite.new
结束