2017-05-14 56 views
0

我是新来的rails和试验。在我设法做了this之后,我正在尝试执行以下操作:rails 5.1:将变量传递给partial通过ajax

当点击设置名称的链接时,它的描述应该在同一页面上呈现为部分。我设法渲染了部分内容,但前提是我在其中添加了一些静态文本。出于某种原因,我无法传递@fbs变量,从而选择描述。我对其他类似问题尝试了许多不同的建议,但我真的不明白我应该怎么做。我使用Ruby 2.4.0和5.1导轨

这里是我的_settingsfb.html.erb(这是部分index.html.erb的和包含LINK_TO)

<div class="container fluid"> 
    <div class="row"> 


    <!-- settings links --> 
    <div class="col-md-4 "> 
<div class="panel panel-default"> 
    <div class="panel-heading"> 
    <h3 class="panel-title">Settings</h3> 
    </div> 
    <div class="panel-body"> 
    <% @fbs.each do |fbs| %> 
<ul> 
     <li> <%= link_to fbs.name, controller: 'settingsfb', action: 'show', id: fbs.id,remote: true %></li> 
     </ul><% end %> 
    </div> 
</div> 
</div> 

    <!-- setting description --> 

    <div class="col-md-4"> 
<div class="panel panel-default"> 
    <div class="panel-heading"> 
    <h3 class="panel-title">Description</h3> 
    </div> 
    <div class="panel-body"> 
    <div id="desc"> 
     <!-- here goes the description partial --> 
    </div> 
    </div> 
</div> 
</div> 

这里settingsfb_controller (相关部分)

class SettingsfbController < ApplicationController 
    before_action :set_setting, only: [:show, :edit, :update, :destroy] 

    # GET /settings 
    # GET /settings.json 
    def index 
    @settings = Setting.all 
    @fbs = Setting.where("Sns = 1") 
    end 



    # GET /settings/1 
    # GET /settings/1.json 
    def show 
     respond_to do |format| 
     format.js {render layout: false} 
    end 
    end 

的show.js.erb

$("#desc").html("<%= j render 'settingsfb/show' %>"); 

和_show局部

<%= @fbs.name %> 

这就是当我点击一个链接

Started GET "/settingsfb/show?id=1" for 127.0.0.1 at 2017-05-14 17:08:34 +0200 
    Processing by SettingsfbController#show as JS 
     Parameters: {"id"=>"1"} 
     Setting Load (0.3ms) SELECT "settings".* FROM "settings" WHERE "settings"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] 
     Rendering settingsfb/show.js.erb 
     Rendered settingsfb/_show.html.erb (2.6ms) 
     Rendered settingsfb/show.js.erb (3.8ms) 
    Completed 500 Internal Server Error in 6ms (ActiveRecord: 0.3ms) 



    ActionView::Template::Error (undefined method `name' for nil:NilClass): 
     1: <%= @fbs.name %> 

    app/views/settingsfb/_show.html.erb:1:in `_app_views_settingsfb__show_html_erb___617047289144576595_70310163068960' 
    app/views/settingsfb/show.js.erb:1:in `_app_views_settingsfb_show_js_erb___3755597588635490219_70310163079560' 
    app/controllers/settingsfb_controller.rb:17:in `block (2 levels) in show' 
    app/controllers/settingsfb_controller.rb:16:in `show' 

任何想法我得到什么?

+0

显示您的:set_setting方法 –

+0

'#使用回调共享操作之间的常见设置或约束。 高清set_setting @setting = Setting.find(PARAMS [:编号]) end' @AlexanderSvetly – engid87

+0

我已经尝试过,初始化'@ fbs'在控制器中的表演动作的开始,但随后我的部分呈现“设置“而不是”设置nr 1“(这将是''fbs.name的正确输出)' – engid87

回答

1

表演动作后呈现之前,您应该初始化@fbs。所以在show方法的开头添加@fbs = Setting.find(params[:id])

0

该错误表示没有@fbs变量。您从show.js.erb视图调用settingsFbShow部分,但不传递任何变量。尝试

$("#desc").html("<%= j render 'settingsfb/show', locals: {fbs: fbs} %>"); 

然后在create.js.erb

<%= fbs.name %> 
+0

我试过了,但没有改变 – engid87