product, category and brand
。在控制器上是一团糟但正在工作。在左侧,我有2 each.do list
,一个用于category
,另一个用于brand
。在页面的其余部分,我有products
。当我选择TV category
时,它会给我所有tv
这是好的(它在http://localhost:3000/**categories**/8
页面上),当我选择让我们说LG品牌它给我时所有LG : Tv , Phones....etc.
(它都在http://localhost:3000/**brands**/6
页面上),我只想要所有LG电视。我相信我的问题来自于受孕,所以我从一开始就弄得一团糟。
类别模型:
has_many :products, dependent: :destroy
has_many :brands
产品型号:
belongs_to :category
belongs_to :brand
品牌型号:
has_many :products
belongs_to :category
你能给我一个建议,如何开始构建这个正确的(只是一个大纲),或者告诉我你正在使用什么样的宝石。我不知道我的问题是来自关系还是过滤。
谢谢大家。
答案 0 :(得分:0)
您的主要问题是品牌和类别之间的关系。这是多对多而不是一对多。
品牌型号:
has_many :products
has_many :categories, through: products
类别模型:
has_many :products
has_many :brands, through: productions
产品型号:
belongs_to :brand
belongs_to :category
答案 1 :(得分:0)
当您点击类别链接时,您正在调用此类别的show方法。当您点击某个品牌时,您正在调用此品牌的show方法。两种show方法都列出了类别(或品牌)的所有产品,但不记得以前的过滤器(品牌或类别)。您的类别或品牌链接也应传递已过滤的品牌或类别。您可以通过在show方法中定义两个实例变量来实现:
CategoriesController
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.app.app">
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.nfc" android:required="false"/>
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".timer.UploadService"
android:enabled="true"
android:exported="true">
</service>
<service
android:name=".services.uploaddata.ui.UploadDataService"
android:enabled="true"
android:exported="true">
</service>
<activity android:name=".main.ui.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:launchMode="singleTask"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".p1.ui.class1"
android:label="@string/title_activity_class1"
android:screenOrientation="portrait"
android:launchMode="singleTask">
</activity>
<activity
android:name=".p2.ui.class2"
android:label="@string/title_activity_class2"
android:screenOrientation="portrait"
android:theme="@style/class2ActivityTheme"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:name=".p3.ui.class3"
android:theme="@style/AppTheme.ActionBar"
android:label="@string/title_activity_class3"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".p4.ui.class4"
android:label="@string/title_activity_class4"
android:theme="@style/AppTheme.ActionBar"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".p5.ui.class5"
android:label="@string/title_activity_class5"
android:screenOrientation="portrait">
</activity>
</application>
</manifest>
BrandsController几乎相同,按category_id过滤:@cat
然后,在链接中:
def show
@brand = params[:brand]
@cat = params[:cat]
#find the category or brand to show as usual.
@category = Category.find_by(id: params[:id])
products = @category.products.where(brand_id: @brand)
end
品牌链接相同
修改
你也必须像肖恩所说的那样改变模特。