Ruby on rails 呈现形式部分-未定义的方法'to#u key';
我试图在一个单独的控制器中呈现一个部分窗体Ruby on rails 呈现形式部分-未定义的方法'to#u key';,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图在一个单独的控制器中呈现一个部分窗体 #app/views/users/my_transactions.html.erb <%= render 'transactions/form', transaction: @transaction %> 及 提前谢谢你!!我找不到任何解决方案,我已经阅读了大量文档,希望能够解决这个问题 编辑 渲染调用的更清晰视图(通过@engineersmnky修复) #app/views/users/my_transactions.html.erb
#app/views/users/my_transactions.html.erb
<%= render 'transactions/form', transaction: @transaction %>
及
提前谢谢你!!我找不到任何解决方案,我已经阅读了大量文档,希望能够解决这个问题
编辑
渲染调用的更清晰视图(通过@engineersmnky修复)
#app/views/users/my_transactions.html.erb
新交易
当前交易
显示部分内容的清晰视图
#app/views/transactions/_show.html.erb
<% @user.transactions.each do |transaction| %>
<tr>
<td class="date"><%= transaction.created_at.strftime("%D") %></td>
<td><%= transaction.amount %></td>
<td class="convert-category"><%= transaction.category %></td>
<td class="convert-sub-category"><%= transaction.sub_category %></td>
<td><%= transaction.notes%></td>
#app/views/transactions/_show.html.erb
您的问题在用户控制器中
transactioncontroller#create
方法应该可以,因为您只引用了一个事务
。在userscocontroller
中,您正在为当前用户引用事务的集合,因此出现错误
您应该可以将此更改为
def my_transactions
@transaction = current_user.transactions.build
@user = current_user
end
这样,@transaction
将是一个新的事务
,在两种上下文中都与当前用户
关联
另一个选项是,如果要显示所有事务以及添加新事务的能力,则不要使用userscocontroller
,而是将render语句更改为:
#app/views/users/my_transactions.html.erb
<%= render 'transactions/form', transaction: @user.transactions.build %>
#app/views/users/my_transactions.html.erb
这将对表单产生与上述相同的效果,但会将您的@transaction
实例变量保留为事务的集合,以便在该视图上显示。我认为问题发生在渲染
方法:
在这里,您传递的是@transaction
,就好像它是单个对象,但却是一个集合。您应该将集合选项与render
一起使用。大概是这样的:
# app/views/users/my_transactions.html.erb
<%= render partial: 'transactions/form', collection: @transactions %>
#app/views/users/my_transactions.html.erb
更多信息,请参阅Rails Guide()第3.4.5节。当我重新排列我的#app/views/users/my#u transactions.html.erb以在顶部通过显示当前事务时,选项2会起作用,但我希望显示渲染新的部分,然后显示部分。我知道这与在显示部分之前呈现表单的实例变量处理有关。作为参考,_show.html.erb以@jcxswc开头,您的评论非常不清楚。如果您想在表单下方显示部分内容,只需在
之后添加
,但我会假设TransactionController#show
是一个单一事务的RESTful表示,具有类似“/transactions/:id”的路径,抱歉不够清晰。通过_form.html.erb右下方的_show.html.erb部分,我显示了完整的事务列表。因此,用户可以在网页顶部添加事务,但也可以在底部查看所有事务。在_show.html.erb中,启动每个循环都是render
不是问题。错误为(事务)
的form\u,因为正在传递的本地事务
是集合代理
而不是事务的单个实例
#app/views/transactions/_show.html.erb
<% @user.transactions.each do |transaction| %>
<tr>
<td class="date"><%= transaction.created_at.strftime("%D") %></td>
<td><%= transaction.amount %></td>
<td class="convert-category"><%= transaction.category %></td>
<td class="convert-sub-category"><%= transaction.sub_category %></td>
<td><%= transaction.notes%></td>
def my_transactions
@transaction = current_user.transactions.build
@user = current_user
end
#app/views/users/my_transactions.html.erb
<%= render 'transactions/form', transaction: @user.transactions.build %>
# app/views/users/my_transactions.html.erb
<%= render partial: 'transactions/form', collection: @transactions %>